스트림은 데이터의 지속적인 흐름입니다. Java에서 I/O 스트림은 입력 소스에서 읽거나 파일과 같은 출력 대상에 쓰는 데 사용됩니다. 이는 데이터에 순차적으로 액세스하는 방법을 제공합니다. java.io 패키지에는 바이트 스트림과 문자 스트림을 모두 처리하고 둘 사이를 변환하기 위한 클래스가 포함되어 있습니다.
- 입력 스트림: 소스에서 데이터를 읽습니다.
- 출력 스트림: 데이터를 대상에 씁니다.
바이트 스트림을 통해 문자 스트림을 사용하는 경우:
Java 문자는 유니코드 규칙을 사용하여 저장됩니다. 문자 스트림은 텍스트 파일을 처리할 때 유용합니다. 이러한 텍스트 파일은 문자별로 처리될 수 있습니다. 문자 크기는 일반적으로 16비트입니다.
문자 스트림 대신 바이트 스트림을 사용하는 경우:
바이트 지향은 바이트 단위로 읽습니다. 바이트 스트림은 바이너리 파일과 같은 원시 데이터를 처리하는 데 적합합니다.
위의 스트림을 사용하고 처리할 때의 핵심 사항:
- 문자 스트림 클래스는 일반적으로 Reader/Writer로 끝나는 반면 바이트 스트림 클래스는 InputStream/OutputStream으로 끝납니다.
- 이 문서의 예제 코드는 덜 효율적인 버퍼링되지 않은 스트림을 사용합니다. 더 나은 성능을 위해 일반적으로 BufferedReader/BufferedWriter(문자 스트림) 또는 BufferedInputStream/BufferedOutputStream(바이트 스트림)으로 래핑합니다.
- 리소스를 확보하고 오류를 방지하려면 사용 후에는 항상 스트림을 닫으세요.
- 파일이 존재하지 않을 수 있으므로 위 코드는 온라인 컴파일러에서 실행되지 않을 수 있습니다.
캐릭터 스트림
Java 문자는 유니코드 규칙을 사용하여 저장됩니다. 문자 스트림을 사용하면 자동으로 데이터를 문자 단위로 읽고 쓸 수 있습니다. 예를 들어 FileReader 및 FileWriter는 소스에서 읽고 대상에 쓰는 데 사용되는 문자 스트림입니다.
캐릭터 스트림예
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null as we have not read anything FileReader sourceStream = null; try { // Reading from file sourceStream = new FileReader('/Users/mayanksolanki/Desktop/demo.rtf'); // Reading sourcefile and writing content to target file character by character. int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) System.out.println((char)temp); System.out.print('Program successfully executed'); } finally { if (sourceStream != null) sourceStream.close(); } } }
산출:
콘텐츠를 대상 파일에 문자별로 씁니다.
프로그램이 성공적으로 실행되었습니다.
바이트 스트림
Java의 바이트 스트림은 원시 8비트 이진 데이터의 입력 및 출력을 처리하는 스트림입니다. 주로 이미지, 오디오 비디오 또는 바이너리 파일과 같은 텍스트가 아닌 데이터를 읽고 쓰는 데 사용됩니다. 예를 들어 파일입력스트림 소스에서 읽는 데 사용되며 FileOutputStream은 대상에 쓰는 데 사용됩니다.
예:
Javaimport java.io.*; public class GFG { public static void main(String[] args) throws IOException { // Initially assigning null ot objects for reading and writing to file FileInputStream sourceStream = null; FileOutputStream targetStream = null; try { // Passing the files via local directory sourceStream = new FileInputStream('/Users/mayanksolanki/Desktop/demo.rtf'); targetStream = new FileOutputStream('/Users/mayanksolanki/Desktop/democopy.rtf'); // Reading source file and writing content to file byte by byte int temp; // If there is content inside file than read while ((temp = sourceStream.read()) != -1) targetStream.write((byte)temp); System.out.print('Program successfully executed'); } // finally block that executes for sure where we are closing file connections to avoid memory leakage finally { if (sourceStream != null) sourceStream.close(); if (targetStream != null) targetStream.close(); } } }
산출:
프로그램이 성공적으로 실행되었습니다.
문자 스트림과 바이트 스트림의 차이점
| 측면 | 캐릭터 스트림 | 바이트 스트림 |
|---|---|---|
| 처리된 데이터 유형 | 16비트 유니코드 문자(텍스트) | 8비트 원시 데이터(바이너리) |
| 수업은 다음으로 끝납니다. | 독자 / 작가 | 입력스트림 / 출력스트림 |
| 적합 | 텍스트 파일 유니코드 데이터 | 이미지 오디오 비디오 바이너리 파일 |
| 변환 | 바이트를 문자로 자동 변환합니다. | 원시 바이트에서는 변환이 작동하지 않습니다. |
| 예 | 파일리더 파일라이터 | FileInputStream FileOutputStream |
관련 기사
- Java IO - 예제가 포함된 Java의 입력/출력