-
[TIL] 2022년 9월 17일 토요일카테고리 없음 2022. 9. 17. 12:30
1.5 문자기반 스트림 - Reader, Writer
- Java에서 문자 자료형인 char는 2 byte 이지만 바이트기반 스트림은 1byte로 바이트기반 스트림으로 문자를 처리하기 어려움
→ 문자데이터를 입출력할 때 문자기반 스트림을 사용바이트기반 스트림 문자기반 스트림 FileInputStream
FileOutputStreamFileReader
FileWriterByteArrayInputStream
ByteArrayOutputStreamByteArrayReader
ByteArrayWriterPipedInputStream
PipedOutputStreamPipedReader
PipedWriterStringBufferedInputStream(deprecated)StringBufferedOutputStream(deprecated)StringReader
StringWriter- 바이트기반 스트림처럼 문자기반 스트림도 보조스트림이 따로 존재
바이트기반 보조스트림 문자기반 보조스트림 BufferedInputStream
BufferedOutputStreamBufferedReader
BufferedWriterFilterInputStream
FilterOutputStreamFilterReader
FilterWriterLineNumberInputStream(deprecated)LineNumberReader PrintStream PrintWriter PushbackInputStream PushbackReader 2. 바이트기반 스트림
2.1 InputStream과 OutputStream
- 공통으로 있는 close()는 스트림을 닫아주는 메소드로 JVM이 사용하고 닫지 않은 스트림을 닫아주긴 하지만 직접 닫아주는게 좋음
- InputStream의 mark()는 현재 위치를 표시해놓는 메소드로 매개변수로 readlimit을 받아 되돌아갈 수 있는 byte의 수를 받을 수 있고, reset()은 스트림의 위치를 마지막으로 mark()가 호출된 곳으로 돌아감. 두 메소드를 사용하기 전 markSupported()를 이용하여 mark()와 reset()을 지원하는지 알 수 있음.
- flush()는 스트림 버퍼에 있는 모든 내용을 출력 소스에 쓰는데 보조스트림을 이용하지 않아 버퍼가 없는 OutputStream의 flush()는 아무 작업도 하지 않음
2.2 ByteArrayInputStream과 ByteArrayOutputStream
ByteArrayInputStream는 이름 그대로 바이트배열로 데이터를 입출력하는데 사용하는 스트림으로 스트림에서 읽을 수 있는 바이트를 가진 내부 버퍼를 갖고있다. 내부 카운터가 read()로 다음 바이트를 추적한다.
더보기IOEx1.java
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Arrays; public class IOEx { public static void main(String[] args) { byte[] inSrc = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; byte[] outSrc = null; ByteArrayInputStream input = null; ByteArrayOutputStream output = null; input = new ByteArrayInputStream(inSrc); output = new ByteArrayOutputStream(); int data = 0; while((data = input.read()) != -1) output.write(data); outSrc = output.toByteArray(); System.out.println("INPUT SOURCE : " + Arrays.toString(inSrc)); System.out.println("OUTPUT SOURCE : " + Arrays.toString(outSrc)); } }
더보기IOEx2.java
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.Arrays; public class IOEx { public static void main(String[] args) { byte[] inSrc = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; byte[] outSrc = null; byte[] temp = new byte[10]; ByteArrayInputStream input = null; ByteArrayOutputStream output = null; input = new ByteArrayInputStream(inSrc); output = new ByteArrayOutputStream(); input.read(temp, 0, temp.length); output.write(temp, 5, 5); outSrc = output.toByteArray(); System.out.println("TEMP : " + Arrays.toString(temp)); System.out.println("INPUT SOURCE : " + Arrays.toString(inSrc)); System.out.println("OUTPUT SOURCE : " + Arrays.toString(outSrc)); } }
더보기IOEx3.java
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Arrays; public class IOEx { public static void main(String[] args) { byte[] inSrc = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; byte[] outSrc = null; byte[] temp = new byte[4]; ByteArrayInputStream input = null; ByteArrayOutputStream output = null; input = new ByteArrayInputStream(inSrc); output = new ByteArrayOutputStream(); System.out.println("INPUT SOURCE : " + Arrays.toString(inSrc)); try{ while (input.available() > 0){ input.read(temp); output.write(temp); //System.out.println("TEMP : " + Arrays.toString(temp)); outSrc = output.toByteArray(); printArray(temp, outSrc); } }catch (IOException e){ } } static void printArray(byte[] temp, byte[] outSrc){ System.out.println("TEMP : " + Arrays.toString(temp)); System.out.println("OUTPUT SOURCE : " + Arrays.toString(outSrc)); } }
IOEx4.java
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Arrays; public class IOEx { public static void main(String[] args) { byte[] inSrc = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; byte[] outSrc = null; byte[] temp = new byte[4]; ByteArrayInputStream input = null; ByteArrayOutputStream output = null; input = new ByteArrayInputStream(inSrc); output = new ByteArrayOutputStream(); try{ while (input.available() > 0){ int len = input.read(temp); output.write(temp, 0, len); } }catch (IOException e){ } outSrc = output.toByteArray(); System.out.println("INPUT SOURCE : " + Arrays.toString(inSrc)); System.out.println("TEMP : " + Arrays.toString(temp)); System.out.println("OUTPUT SOURCE : " + Arrays.toString(outSrc)); } }