import java.io.*;
class DataInOutStream
{
public static void main(String[] args) throws Exception
{
String sourcefile="test.txt";
String targetfile="test.txt";
//DataOutputStream : 필터스트림
// 자바의 다양한 자료형(Data Type)들은 바이트 단위로 분해하여 쓰기 작업을 한다.
// DataInputStream과 짝을 이뤄 사용한다.
//1. 파일 sourcefile과 노드 연결 스트림 생성
FileOutputStream fos = new FileOutputStream(targetfile);
// test.txt에 쓰기
//2.필터링: DataOutputStream과 연결
DataOutputStream dos = new DataOutputStream(fos);
//3.자바의 다양한 자료형의 데이터를 써보자.
byte b=2;
byte [] arr={65,66,67};
boolean bool=true;
char ch ='가';
String str="홍길동";//9바이트+2바이트
dos.write(b);
dos.write(arr,0,arr.length);
dos.writeBoolean(bool);
dos.writeChar(ch);
dos.writeUTF(str);
//유니코드의 utf-8형식으로 문자열을 출력하는 메소드
//utf형식은 각 문자의 표현을 위해 한바이트 사용하는지,
//두바이트 또는 세바이트 차지하는지 알아내어
// ACII문자는 1바이트로, 그리스어, 히브리어, 아랍어 등의
// 문자는 2바이트로, 그외의 문자는 3바이트로 표현된다.
System.out.println("총:" +dos.size()+"바이트 썼음");
dos.flush();
dos.close();
DataInputStream dis = new DataInputStream(new FileInputStream(sourcefile));
//test.txt 읽기
System.out.println("읽어 올 수 있는 바이트 수:"+dis.available());
byte b2 = dis.readByte();
System.out.println(b2);
int n = dis.read(arr,0,arr.length);
//n: 바이트수
for (byte bt: arr)
System.out.println((char)bt);
boolean res=dis.readBoolean();
System.out.println(res);
char ch2=dis.readChar();
System.out.println(ch2);
String str2=dis.readUTF();
System.out.println(str2);
dis.close();
}
}