logo

Java의 문자 스트림과 바이트 스트림

스트림은 데이터의 지속적인 흐름입니다. Java에서 I/O 스트림은 입력 소스에서 읽거나 파일과 같은 출력 대상에 쓰는 데 사용됩니다. 이는 데이터에 순차적으로 액세스하는 방법을 제공합니다. java.io 패키지에는 바이트 스트림과 문자 스트림을 모두 처리하고 둘 사이를 변환하기 위한 클래스가 포함되어 있습니다.

  • 입력 스트림: 소스에서 데이터를 읽습니다. 
  • 출력 스트림: 데이터를 대상에 씁니다. 

바이트 스트림을 통해 문자 스트림을 사용하는 경우:

Java 문자는 유니코드 규칙을 사용하여 저장됩니다. 문자 스트림은 텍스트 파일을 처리할 때 유용합니다. 이러한 텍스트 파일은 문자별로 처리될 수 있습니다. 문자 크기는 일반적으로 16비트입니다.



문자 스트림 대신 바이트 스트림을 사용하는 경우:

바이트 지향은 바이트 단위로 읽습니다. 바이트 스트림은 바이너리 파일과 같은 원시 데이터를 처리하는 데 적합합니다.

위의 스트림을 사용하고 처리할 때의 핵심 사항:

  • 문자 스트림 클래스는 일반적으로 Reader/Writer로 끝나는 반면 바이트 스트림 클래스는 InputStream/OutputStream으로 끝납니다.
  • 이 문서의 예제 코드는 덜 효율적인 버퍼링되지 않은 스트림을 사용합니다. 더 나은 성능을 위해 일반적으로 BufferedReader/BufferedWriter(문자 스트림) 또는 BufferedInputStream/BufferedOutputStream(바이트 스트림)으로 래핑합니다.
  • 리소스를 확보하고 오류를 방지하려면 사용 후에는 항상 스트림을 닫으세요.
  • 파일이 존재하지 않을 수 있으므로 위 코드는 온라인 컴파일러에서 실행되지 않을 수 있습니다.

캐릭터 스트림

Java 문자는 유니코드 규칙을 사용하여 저장됩니다. 문자 스트림을 사용하면 자동으로 데이터를 문자 단위로 읽고 쓸 수 있습니다. 예를 들어 FileReader 및 FileWriter는 소스에서 읽고 대상에 쓰는 데 사용되는 문자 스트림입니다.

non_unicode_bytes' title=캐릭터 스트림

Java
import 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은 대상에 쓰는 데 사용됩니다.

예:

Java
import 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의 입력/출력