DataOutputStream을 활용하여 데이터를 파일로 저장하고 DataInputStream을 통해 읽어들이기

안녕하세요

이번 시간에는 자바의 다양한 자료형의 데이터를 파일(data.txt)에 쓰고 읽어 들이는 예제를 올려봅니다.


소스 코드 파일은 두 개 입니다.

먼저 DataOutputStream을 활용하여 데이터를 파일(data.txt)에 저장하겠습니다.


public class DataOutputStreamTest {

public static void main(String[] args) throws IOException {

String filename="data.txt";
//노드 연결(노드 스트림 연결)
FileOutputStream fos = new FileOutputStream(filename);
//필터 스트림과 노드 스트림을 연결
DataOutputStream dos = new DataOutputStream(fos);

//data.txt 파일에 데이터를 입력하자
byte b=65; byte[] buf={66,67,68};
short s=100; char ch='가'; boolean bool=true;
double d=123.45; String str="홍길동";

dos.write(b); // 1byte
dos.write(buf,0,buf.length); // 3byte
dos.writeShort(s); // 2byte
dos.writeChar(ch); // 2byte
dos.writeBoolean(bool); // 1byte
dos.writeDouble(d); //8byte
dos.writeUTF(str); // (3*3+2)byte

/* 문자열을 쓰고자 할 때 writeUTF()를 많이 이용
* 유니코드 utf-8 형식으로 문자열을 출력하는 메소드
* utf형식은 각 문자의 표현을 위해 한 바이트 사용했는지, 두 바이트 또는 세 바이트 차지하는지 알아내어
* 아스키 문자는 1byte로, 그리스어, 히브리어, 아랍어 등은 2byte로, 그 외 문자는 3byte로 표현
* */

System.out.println(dos.size()+"bytes 씀"); // 28byte

dos.flush(); // 스트림에 남아있는 데이터가 있으면 밀어내기를 해준다.

dos.close();
}

}


위의 소스 코드를 실행하면 아래와 같습니다


보시다시피 28bytes를 썼다는 문구와 함께 디렉토리에 data.txt 라는 파일이 생성하게 됩니다. 



data.txt 파일을 열어보면 영문자는 정상적으로 출력되지만 다른 문자는 인간이 이해하기 힘든 문자로 저장되었다는 것을 알 수 있습니다.

글자가 깨진건 아니니 염려마십시요~



위에서 DataOutputStream을 통해 내보낸 데이터는 반드시 DataInputStream을 통해  읽어야 합니다.

이번에는 DataInputStream 예제입니다.


public class DataInputStreamTest {

public static void main(String[] args) throws IOException {

DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"));
System.out.println(dis.available()+"바이트 읽을 예정");
// 파일에 쓴 순서대로 읽어야 함
byte a=dis.readByte(); System.out.println(a);
byte[]ba=new byte[3];
int n=dis.read(ba);
for(byte b:ba){
System.out.println(b);
}
short s=dis.readShort(); System.out.println(s);
System.out.println(dis.readChar());
System.out.println(dis.readBoolean());
System.out.println(dis.readDouble());
System.out.println(dis.readUTF());
dis.close();
}

}

보시다시피 위의 결과를 실행하면 DataOutputStream 예제에서 저장했던 결과를 불러올 수 있습니다.




댓글 없음:

댓글 쓰기