[JAVA] 입출력 스트림

2023. 5. 30. 20:46Languages/JAVA

💬 기억하고 싶거나 공부한 내용을 기록중입니다 :)   개인적으로 기억하고 싶은 내용들을 적어두고 있습니다.

💬 오늘의 기록은 예시 위주로 작성합니다 :)

 

 

1️⃣ 입출력 스트림

1. 바이트 기반 스트림

1) (출력)OutputStream 
OutputStream os = new FileOutputStream("C:\\java\\1.txt");

2) (입력)InputStream
InputStream os = new FileInputStream("C:\\java\\1.txt");
- read()메소드 : 읽을 수 없다면, -1을 리턴

2. 문자 기반 스트림

1) (출력)Writer
Writer writer = new FileWriter("C:\\java\\1.txt");

2) (입력)Reader
Reader reader = new FileReader("C:\\java\\1.txt");

2️⃣ 보조스트림

1. 이해하기

 

- 형태 : 보조스트림 변수 = new 보조스트림(연결스트림)
- 보조 스트림은 연속적으로 연결할 수 있다. (하단 예시)
   FileInputStream fis = new FileInputStream("C:\\java\\1.txt");
   InputStreamer isr = new InputStreamReader(fis);
   FileReader rd = new FileReader(isr);
- 순서도 : 입력 스트림 - 보조스트림 -> 프로그램 -> 보조스트림 - 출력 스트림

 

2. 기본 타입(primitive type) 입출력 보조 스트림

 

1) 출력(예시)
  FileOutputStream fos = new FileOutputStream("C:\\java\\1.txt");
  DataOutputStream dos = new DataOutputStream(fos);

2) 입력(예시)
  FileInputStream fis = new FileInputStream("C:\\java\\1.txt");
  DataInputStream dis = new DataInputStream(fis);
3) 특이사항
출력시스템으로 출력한 데이터가 있다. 이 데이터를 입력시스템으로 읽어올 때는, 출력한 순서와 같은 순서로 읽어야 한다.

 

3. 성능 향상 프로그램(buffer)

 

- 프로그램과 입출력 사이에서 buffer가 작업하는데, 버퍼에 데이터가 쌓였다가 꽉 차면 한번에 보냄으로 출력 횟수 줄여줌
1) 출력 (예시)
  FileOutputStream fos = new FileOutputStream("C:\\java\\1.txt");
  BufferedOutputStream bos = new BufferedOutputStream(fos);
2) 입력 (예시)
  FileInputStream fis = new FileInputStream("C:\\java\\1.txt");
  BufferedInputStream bis = new BufferedInputStream(fis);

✔참고

Reader reader = new FileReader(~~~.class.getRescource("1.txt").getPath());
BufferedReader br = new BufferedReader(reader);

while(true){
  String str = br.readLine(); // 라인 단위 문자열이라 readLine, 보통 read
  if(str == null) break;       // String타입이라 null로 표시, data로 받았다면 보통 -1
  System.out.println(str);
}

br.close();


4. 객체 입출력 보조 스트림(★)
1) 이해하기
- 직렬화: 객체를 바이트 배열로 만드는 것 / 역질렬화 : 바이트 배열을 객체로 만드는 것
- 순서 
바이트 > InputStream > ObjectInputStream(역직렬화) > 프로그램 > ObjectOutputStream(직렬화) > OutputStream > 바이트
- 자바에서 java.io.Serializable 인터페이스(주의: 메소드 선언이 없음)를 구현한 객체만 직렬화함,
  객체를 파일로 저장 또는 네트워크로 전송할 목적이라면, 클래스 선언시 implements Serializable 추가해야 함

2) 출력(예시)

FileInputStream fis = new FileInputStream("C:\\javaStudy\\practice\\\\guitar.txt");
ObjectInputStream is = new ObjectInputStream(fis);
List<Guitar> guitarList = (List<Guitar>) is.readObject();
return guitarList;

3) 입력(예시)

FileOutputStream fos = new FileOutputStream("C:\\javaStudy\\practice\\guitar.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(guitarList);
oos.flush();
oos.close();

'Languages > JAVA' 카테고리의 다른 글

[JAVA] 간단한 Predicate<T>  (0) 2024.03.31
[JAVA] Stream  (0) 2024.01.24
[JAVA] 인터페이스, 컬렉션 프레임워크, 스레드  (0) 2023.05.26
[JAVA] 컬렉션 프레임워크  (0) 2023.05.22
[JAVA] 클래스(강제 형변환)  (0) 2023.05.18