자바 문자 흐름과 바이트 흐름의 차이와 용법 분석

본고는 자바 문자 흐름과 바이트 흐름의 차이와 용법을 실례로 기술하였다.다음과 같이 여러분에게 참고할 수 있도록 공유합니다.
바이트 흐름과 문자 흐름의 주요한 차이는 그들의 처리 방식이다
흐름 분류:
1.Java 바이트 흐름
InputStream은 모든 바이트 입력 흐름의 조상이고, OutputStream은 모든 바이트 출력 흐름의 조상이다.
2. Java의 문자 흐름
Reader는 모든 읽기 문자열의 입력 흐름의 조상이고, writer는 모든 출력 문자열의 조상입니다.
InputStream, OutputStream, Reader, writer는 모두 추상적인 클래스입니다.그래서 그냥 new가 안 돼요.
바이트 흐름은 가장 기본적인 것이다. 모든 InputStream과 OutputStream의 하위 클래스는 주로 2진 데이터를 처리하는데 사용되며, 바이트에 따라 처리된다
그러나 실제적으로 많은 데이터는 텍스트이고 문자 흐름의 개념을 제시했다. 이것은 가상 기기의 encode에 따라 처리하는 것이다. 즉, 문자 집합의 전환을 해야 한다.
이 두 가지 사이는 InputStreamReader, OutputStreamWriter를 통해 연결되며, 실제로는 byte[]와 String을 통해 연결된다
실제 개발에서 나타난 한자 문제는 사실상 문자 흐름과 바이트 흐름 사이의 전환이 통일되지 않아 발생한 것이다
바이트 흐름에서 문자 흐름으로 바뀔 때, 실제로는byte[]가 String으로 바뀔 때,

public String(byte bytes[], String charsetName)

관건적인 매개 변수 문자 집합 인코딩이 있는데, 통상적으로 우리는 모두 생략하고, 그 시스템은 운영체제의lang를 사용한다
문자 흐름이 바이트 흐름으로 바뀔 때, 실제로는 String이byte[]로 바뀔 때,
byte[]    String.getBytes(String charsetName)
같은 이치입니다.
자바에 대해서는.io에는 성능과 사용의 편의를 높이기 위해 다른 흐름도 많이 등장했다.
예: Buffered InputStream, Piped InputStream 등
구체적 실현
바이트 흐름 FileInputStream FileOutputStream
문자 흐름 FileReader FileWriter
문자 흐름 처리 단원은 2바이트의 유니코드 문자로 각각 문자, 문자 그룹, 문자열을 조작하고, 바이트 흐름 처리 단원은 1바이트, 바이트와 문자열을 조작한다.따라서 문자 흐름은 자바 가상 컴퓨터가 바이트를 2바이트의 유니코드 문자 단위로 바꾸는 문자로 이루어져 있기 때문에 다국적 언어에 대한 지원성이 비교적 좋다!오디오 파일, 그림, 노래라면 바이트로 잘 흐르고, 중국어(텍스트)와 관련된 문자로 잘 흐른다.
모든 파일의 저장은 바이트 (byte) 의 저장입니다. 디스크에 저장된 것은 파일의 문자가 아니라 문자를 바이트로 인코딩한 다음에 디스크에 저장합니다.파일 (특히 텍스트 파일) 을 읽을 때도 바이트 서열을 만들기 위해 바이트를 하나씩 읽습니다.
바이트 흐름은 바이트 대상을 포함하여 모든 유형의 대상에 사용할 수 있으며, 문자 흐름은 문자나 문자열만 처리할 수 있다.2. 바이트 흐름은 모든 유형의 IO 작업을 처리하는 기능을 제공하지만, 유니코드 문자를 직접 처리할 수는 없고, 문자 흐름만 처리하면 된다.
바이트 흐름을 문자 흐름으로 변환하려면 InputSteamReader OutputStreamWriter를 사용하십시오.
BufferdReader BufferedWriter로 변환 버퍼가 있습니다.
예를 들어 읽기 파일이 바이트 흐름에서 문자 흐름으로 입력됨
바이트 스트림 정의:

FileInputStream fileInputStream = new FileInputStream("d:/text.txt");
//  D:/TEXT.TXT  
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
// InputStreamReader
BufferedReader bufferedReader = new BufferedReader(inputSteamReader);
//InputStreamReader  bufferedReader

읽은 내용을 문자에 값을 부여할 수 있다

String ss = new String();
String s;
while((s = bufferedReader.readLine())!=null){
    ss += s;
}
FileInputStream fileInputStream = new FileInputStream("d:/text.txt"); //  D:/TEXT.TXT     InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);  // InputStreamReader   BufferedReader bufferedReader = new BufferedReader(inputSteamReader);  //InputStreamReader  bufferedReader     String ss = new String();  String s;  while((s = bufferedReader.readLine())!=null){ ss += s; }

예를 들어 쓰기 파일이 바이트 흐름에서 문자 흐름으로 출력됨

FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");
// D:/TEXT.TXT 
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write(s);
bufferedWriter.close();
outputStreamWriter.close();
fileOutputStream.close();
FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");  // D:/TEXT.TXT 
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write(s);
bufferedWriter.close();
outputStreamWriter.close();
fileOutputStream.close();

일정:
문자열을 바이트 흐름으로 바꾸기 #region 문자열을 바이트 흐름으로 바꾸기

/**/ ///  <summary>
///  
///  </summary>
///  <param name="_Source">   </param>
///  <returns>   </returns>
public  static  byte [] String2Bytes( string strSource)
{
   System.IO.MemoryStream  memoryStream = new  System.IO.MemoryStream();
   System.IO.BinaryWriter  binaryWriter = new  System.IO.BinaryWriter(memoryStream);
   binaryWriter.Write( strSource );
   byte []  buffer = memoryStream.GetBuffer();
   return buffer;
}
#endregion

바이트 흐름을 문자열로 바꾸기 #region 바이트 흐름을 문자열로 바꾸기

/**/ ///  <summary>
///  
///  </summary>
///  <param name="bytData">   </param>
///  <returns>   </returns>
public  static  string Bytes2String( byte [] bytData)
{
   //  -> 
   System.IO.MemoryStream  memoryStream2 =  new  System.IO.MemoryStream(bytData);
   System.IO.BinaryReader  binaryReader =  new  System.IO.BinaryReader(memoryStream2);
   string  s2 = binaryReader.ReadString();
   return s2;
}
#endregion

본고에서 기술한 것이 여러분의 자바 프로그램 설계에 도움이 되기를 바랍니다.

좋은 웹페이지 즐겨찾기