Session 10 |
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); } }
Session 10 |