👨🏻‍💻

[JAVA]입출력2

과목
JAVA
태그
보조스트림
필터스트림
형변환스트림
DataStream
StudyDate
2021/05/06

1.보조 스트림

스트림의 기능을 향상 시키거나 새로운 기능을 추가하기 위해서 사용
보조 스트림은 실제 데이터를 주고 받는 스트림이 아니기 때문에 입출력 처리가 불가능
기반 스트림을 먼저 생성한 후 이를 이용하여 보조 스트림을 생성
보조스트림은 단독으로 사용불가

1-1.대표적 보조스트림의 종류는 ?

1. 입출력 성능→(BufferedInputStream, BufferOutputStream), 2. 기본데이터타입 출력→DataInputStream, DataOutputStream, 3. 객체 입출력(ObjectInputStream/ ObjectOutputStream)등의 기능을 제공하는 보조스트림 이 있다.

1-2. 메인스트림과 보조스트림 코드 예시

2. 필터스트림

2-1 필터스트림이란??

java.io 패키지의 입출력 스트림 클래스들은 기본 스트림과 필터 스트림으로 분류 할 수 있다.
기본 스트림 외부데이터에 직접 연결되는 스트림이고 필터 스트림은 외부데이터에 직접 연결하는 것이 아니라 기본 스트림에 추가로 사용할수 있는 스트림이다.
목적 : 주로 성능 향상을 목적으로 사용 되며 생성자를 보면 구분이 가능하다.
생성자쪽에서 매개변수로 다른 스트림을 이용하는 클래스를 필터스트림이라고 볼 수 있다.
package com.song.practice.io.filterStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Application1 { public static void main(String[] args) { /* 버퍼를 이용해서 성능을 향상시키는 보조스트림 */ BufferedWriter bw = null; try { bw = new BufferedWriter (new FileWriter("src/com/song/practice/io/filterStream/testBuffered.txt")); bw.write("안녕하세요\n"); bw.write("반갑습니다.\n"); // bw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(bw != null) { try { bw.close(); } catch (IOException e) { // TODO: handle exception } } } BufferedReader br = null; try { br = new BufferedReader (new FileReader("src/com/song/practice/io/filterStream/testBuffered.txt")); //readLine = 줄단위로 읽어서 반환타입을 문자열로 반환해준다 String temp; while((temp = br.readLine()) != null ){ System.out.println(temp); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Java
복사

3. 형변환 보조 스트림

3-1 형변환 보조스트림이란??

기본스트림이 byte 기반 스트팀이고 , 보조스트림이 char기반 스트림경우 사용해서 두 개의 다른 문자열을 하나로 합칠 수 있게 도와준다.

3-2 표준 스트림이란 ?

자바에서는 콘솔이나 키보드 같은 표준 입력 장치로부터 데이터를 입출력하기위한 스트림을 표준스트림 형태로 제공하고 있다. System 클래스의 in, out, err가 대상 데이터의 스트림을 의미한다. * System.in (inputStream) : 콘솔로부터 데이터를 입력 받는다. * System.out (PrintWriter) : 콘솔로 데이터를 출력한다. * System.err (PrintWriter) : 콘솔로 데이터를 출력한다. * 즉 자주 사용되는 자원에 대해 미리 스트림을 생성해두었기 때문에 개발자가 별도로 스트림을 생성하지 않는다.
이런 표준 스트림 중 콘솔로부터 읽어오는 기반 스트림이 InputStream인데 Buffer를 이용해서 성능을 향상시키고 싶은 경우에 형변환 보조스트림을 사용할 수 있다.
예시(.readLine()은 한 줄을 읽어오는 메소드)
//BufferedStream은 char기반 스트림 , System.in은 byte기반 스트림 // 그래서 두개를 맞춰줄 inputStreamReader이 필요하다 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { System.out.println("문자열 입력 : "); String value = br.readLine(); System.out.println("value : " + value); System.out.println("숫자 입력 "); int value2 = Integer.parseInt(br.readLine()); System.out.println("value2 = " + (value2 * value2)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(br != null) { try { br.close(); } catch (Exception e2) { // TODO: handle exception } } } BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); try { bw.write("java oracle Jdbc"); } catch (Exception e) { // TODO: handle exception } finally { if(bw != null) { try { bw.close(); } catch (IOException e2) { // TODO: handle exception } } } }
Java
복사

4. Data스트림

4-1 Data스트림이란?

외부 데이터로부터 읽어오는 데이터를 바이트형 정수, 문자, 문자열 로만 읽어오면 여러 데이터 타입을 취급하는경우 별도로 처리를 해주어야한다.

4-2 그래서??

자바에서는 데이터 자료형 별로 처리하는 기능을 추가한 보조스트림을 제공하고 있다. * DataInputStream/DataOutputStream

4-3 코드 예시

package com.song.practice.io.filterStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Application3 { public static void main(String[] args) { DataOutputStream dout = null; try { dout = new DataOutputStream (new FileOutputStream("src/com/song/practice/io/filterStream/score.txt")); dout.writeUTF("홍길동"); dout.writeInt(100); dout.writeChar('A'); dout.writeUTF("아이유"); dout.writeInt(99); dout.writeChar('A'); dout.writeUTF("수지"); dout.writeInt(100); dout.writeChar('S'); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (EOFException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(dout != null) { try { dout.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } DataInputStream din = null; try { din = new DataInputStream( new FileInputStream("src/com/song/practice/io/filterStream/score.txt")); while(true) { System.out.println(din.readUTF() + "," + din.readInt() + "," + din.readChar()); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (EOFException e) { System.out.println("파일 읽기 완료"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(din != null) { try { din.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
Java
복사