본문 바로가기

단축키

Prev이전 문서

Next다음 문서

단축키

Prev이전 문서

Next다음 문서

PrintWriter/BufferedReader 클래스와 ObjectOutputStream/ObjectInputStream 클래스에 대한 간단한 예제입니다.
 
PrintWriter/BufferedReader 클래스들은 주로 text 기반의 자료를 입출력할때, 유용한 메소드들을 제공하며, ObjectOutputStream/ObjectInputStream 클래스들은 객체 데이터를 입출력할때 유용한 메소드들을 제공합니다.
ObjectInputStream의 경우 스트림의 데이터를 Object로 읽어올 수 있는 메소드(readObject)가 있고, ObjectOutputStream의 경우 Object를 스트림 데이터로 만들 수 있는 메소드(writeObject)가 있습니다.
 
주의할 점은 어떤 OutputStream 객체나 Writer 객체에 데이터를 출력할 때는, flush()를 해 줘야 버퍼에 있던 데이터가 실제로 해당 stream으로 출력이 됩니다. 단순히 close() 메소드를 호출해도 flush() 메소드를 호출하므로 상관은 없습니다. 객체에 데이터를 출력하고 flush()와 close()를 하지 않은 경우 파일은 생성이 되지만 stream 에 기록했던 데이터는 실제 파일에 기록되지 않게 됩니다.
 
마지막으로, 객체의 입출력에 있어서 ObjectOutputStream/ObjectInputStream을 사용하면 자동으로 casting 처리가 되므로 상당히 편리합니다. 여기서 한가지 주의점은 이렇게 자바에서 자동 casting 처리가 지원되는 형태로 객체를 입출력하기 위해서는 Serializable 인터페이스를 구현해 줘야 합니다. 별도의 코드 구현은 없으며, 단순히 클래스 선언에서 Serializable 인터페이스 구현을 명시만 해 주면 됩니다.
 
그럼 예제 소스 나갑니다.
 
 
 
import java.util.Date;
import java.io.*;
 
public class TestFileOutput implements Serializable
{
private int iData;
private String sData;
private Date oData;
 
public TestFileOutput() {
iData = 8080;
sData = "Hello World!";
oData = new Date();
}
 
public void writeObjectOutputStream() throws Exception {
FileOutputStream fout = new FileOutputStream("objoutput.txt");
ObjectOutputStream out = new ObjectOutputStream(fout);
 
out.writeObject(this);
out.flush();
out.close();
}
 
public void writePrintWriter() throws Exception {
FileOutputStream fout = new FileOutputStream("printwriter.txt");
PrintWriter out = new PrintWriter(fout);
 
out.println(this.iData);
out.println(this.sData);
out.println(this.oData);
out.flush();
out.close();
}
 
public static void readFromFile() throws Exception {
FileInputStream fin = new FileInputStream("objoutput.txt");
ObjectInputStream oin = new ObjectInputStream(fin);
System.out.println("--- read data from objoutput.txt ---");
TestFileOutput tmp = (TestFileOutput) oin.readObject();
 
System.out.println(tmp.iData);
System.out.println(tmp.sData);
System.out.println(tmp.oData);
 
oin.close();
 
fin = new FileInputStream("printwriter.txt");
BufferedReader bin = new BufferedReader(new InputStreamReader(fin));
String line = null;
System.out.println("--- read data from printwriter.txt ---");
while((line = bin.readLine()) != null)
System.out.println(line);
 
bin.close();
}
 
public static void main(String args[]) throws Exception {
TestFileOutput test = new TestFileOutput();
 
test.writeObjectOutputStream();
test.writePrintWriter();
 
readFromFile();
}
}



List of Articles
번호 분류 제목 글쓴이 조회 수 날짜
공지 덕질 공통 이용규칙 및 안내 (업데이트중+ 2024-04-13) 😀컴덕824 5353 2024.04.14
공지 1000P를 모으면 다이소 상품권 1000원을 신청할 수 있습니다. file Private 5338 2024.02.14
4779 일반 울트라 산 덬들아 용량이랑 색깔 뭐샀어? 😀컴덕793 4 2024.07.04
4778 일반 갤s23 산덬들 케이스 모샀오 😀컴덕735 5 2024.07.04
4777 일반 그럼 울트라 산 덬들은 무슨색삼?? 😀컴덕428 5 2024.07.04
4776 일반 구매한 덬들아 울트라 512(256업글)샀어? 1테라샀어..? 😀컴덕100 5 2024.07.04
4775 일반 이번에 갤23 바꾸는 덬들 원래 폰기종 뭐야? 😀컴덕697 5 2024.07.04
4774 일반 다들 헤드폰 뭐써? 😀컴덕813 5 2024.07.04
4773 일반 엔비디아는 RTX4천세대를 보호하기 위해 수십억 유로를 지불함. file 😀컴덕036 5 2022.01.01
4772 일반 에픽게임즈) 툼레이더 트릴로지 무료배포 ~ 1/7 01시까지 😀컴덕557 5 2022.01.01
4771 일반 새해가 밝았으니 😀컴덕181 5 2022.01.02
4770 일반 슬프다 연말인데.. 😀컴덕688 6 2022.01.01
4769 일반 새해복 많이 받으십시오~~~ 😀컴덕091 6 2022.01.02
4768 일반 아 글구 맥 무선마우스 잘됨 😀컴덕553 7 2022.01.03
4767 일반 윈도우 10 home fpp 질문입니다 😀컴덕582 7 2022.01.03
4766 일반 마우스 싼마이로 로지텍 G304 무선 괜찮나요? 😀컴덕385 7 2022.01.03
4765 일반 ddr4 시금치 램 8기가(2666) 1개 구해봅니다 😀컴덕247 7 2022.01.03
4764 일반 nvme ssd 1tb 구매희망합니다. 😀컴덕759 7 2022.01.01
4763 일반 PCIe 3.0 지원 메인보드에선 gen4 ssd 필요없겠죠? 😀컴덕024 7 2022.01.01
4762 일반 요번 컴터 업글 쓰면서 3열 짭수 첨 써봤는데 😀컴덕619 7 2022.01.01
4761 일반 코인하는 애들 내꺼 3080 안 사주노 😀컴덕841 7 2022.01.01
4760 일반 새해복 많이 받으세요 😀컴덕411 7 2022.01.01
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 239 Next
/ 239