🎉

プログラミング自主学習 DAY80 DataI/OStream/PrintStream・Writer

2023/08/15に公開

DataI/OStream

int型,double型, float型の場合、4bytes、8bytesですので、出力する時は4bytes、8bytesのbyte[] に変換し、出力したり、入力するプロセスがあります。
しかし、このようにデーターを自分で変換することは効率が悪いので、このようなプロセスを内部的に処理してくれるストリムがDataInputStream, DataOutputStreamです。
このように、データーをbyte[] に変換することを**シリアライズ(直列化,Serialization)**と言います。

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class DataInputOutputStreamExample {
      public static void main(String[] args) {
      //DataOutputStream
      try(DataOutputStream dos = new DataOutputStream(new FileOutputStream("C:/tmp/primitive.db"))){
			
       dos.writeUTF("홍길동");	
       dos.writeDouble(95.5);	
       dos.writeInt(1);	
			
       dos.writeUTF("감자바");	
       dos.writeDouble(90.3);	
       dos.writeInt(2);
		
       dos.flush();
	}catch(Exception e) {
		e.printStackTrace();
	}try(DataInputStream dis = new DataInputStream(new FileInputStream("C:/tmp/primitive.db"))){
       	for(int i=0; i<2; i++) {
	 	String name = dis.readUTF();
		double score = dis.readDouble();
		int order = dis.readInt();
	System.out.println(name + ": " + score + ": " + order);
	}
	}catch(Exception e) {
		e.printStackTrace();
	}
  }
}

홍길동: 95.5: 1
감자바: 90.3: 2

PrintStream・PrintWriter

我々が初めて勉強するコードがあります。

System.out.println("Hello, World!")
Hello,World!

Systemクラスのoutフィールドは、PrintStreamの一つで、コンソール上に出力をする機能を持っているメソッドです。

PrintStream、PrintWriter は、このように基本データーや文字、文字列を出力するためのストリームです。System.out.printlnがコンソール上に出力する反面、Print系のクラスのオブジェクトは、プログラムの外部に出力することができるストリームです。

import java.io.FileOutputStream;
import java.io.PrintStream;

public class PrintStreamExample {
public static void main(String[] args) {
   	try(PrintStream ps = new PrintStream(new FileOutputStream("C:/tmp/printstream.txt",false))){
			
        ps.print("まるで");
	ps.println("静かな");
	ps.println("恋のような");
	ps.printf("| %6d | %-10s | %-18s |\n" , 1,"홍길동","도적");
	ps.printf("| %6d | %-10s | %-18s |\n" , 2,"김자바","학생");
	ps.flush();
	}catch(Exception e) {
		e.printStackTrace();
	}
		
    }
}

Discussion