Arvutiteaduse instituut
  1. Kursused
  2. 2019/20 kevad
  3. Objektorienteeritud programmeerimine (Narva Kolledž) (LTAT.NR.003)
EN
Logi sisse

Objektorienteeritud programmeerimine (Narva Kolledž) 2019/20 kevad

  • Home
  • Materials
  • Grading
  • Java Glossary
  • Cheat sheet (S1-S6)
  • Source Example
  • Links
Chapter 9

Data streams

Data streams are particularly suitable for reading and writing primitive data to and from streams. The primitive data type values can be a String or int, long, float, double, byte, short, boolean, and char. The direct implementation classes for Data I/O stream are DataInputStream and DataOutputStream. Study how it is possible to write data into a file:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

 class Item {
    private String name;
    private double quantity;
    private double price;

    public Item(String name, double quantity, double price) {
        this.name = name;
        this.quantity = quantity;
        this.price = price;
    }

    //save data about items
    public void mySave(DataOutputStream dos) throws Exception {
        //pay attention to the write methods and data types
        dos.writeUTF(name);
        dos.writeDouble(quantity);
        dos.writeDouble(price);
    }

    //read data about items
    public static Item myRead(DataInputStream dis) throws Exception {
        //pay attention to the read methods and data types
        String name = dis.readUTF();
        double quantity = dis.readDouble();
        double price = dis.readDouble();
        return new Item(name, quantity, price);
    }

     @Override
     public String toString() {
         return name + ": " + " quantity=" + quantity + " for " + price + '€';
     }
 }


 class Basket {
     private String client;
     private List<Item> items;

     public Basket(String client, List<Item> items) {
         this.client = client;
         this.items = items;
     }

     public void mySave(DataOutputStream dos) throws Exception {
         //pay attention to the write methods and data types
         dos.writeUTF(client);         //save data about client
         dos.writeInt(items.size());  //add the number of items in the basket to ease reading
         //save data about items in the client's basket
         for (Item i : items) {
             i.mySave(dos);
         }
     }

     public static Basket myRead(DataInputStream dis) throws Exception {
         //read data about client
         String client = dis.readUTF();
         //read data about items in the client's basket
         List<Item> items = new ArrayList<>();
         int rItems = dis.readInt(); // instantiate variable for the loop
         for (int i = 0; i < rItems; i++) {
             items.add(Item.myRead(dis));
         }
         return new Basket(client, items);
     }

     @Override
     public String toString() {
         return client + ": " + items;
     }
 }


class Test12 {
    public static void main(String[] args) throws Exception {
        Item chocolate = new Item("chocolate", 2.0, 1.29);
        Item orange = new Item("orange", 2.5, 0.89);
        Basket myBasket = new Basket("Mary", Arrays.asList(chocolate, orange));

        DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.bin"));
        myBasket.mySave(dos);
        dos.close();

        DataInputStream dis = new DataInputStream(new FileInputStream("data.bin"));
        Basket dataFromFile = myBasket.myRead(dis); // the same as at the beginning
        dis.close();

        System.out.println(dataFromFile);

    }
}
Chapter 9
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused