정상적인 상황에서는, 모든 데이터 조작에 대한 바이트 스트림이 될 수 있지만, 때때로 우리는 예를 들어, 중국어 문자의 텍스트를 볼 때하는 것이 더 편리한 스트림을 채택 할 필요가있다, 일부 텍스트 문자 스트림 처리하기 위해 사용하는 경우. 그래서 자바 IO 스트림은 문자 스트림의 흐름을 변환 할 바이트의 스트림을 변환하는 데 사용되는 두 제공합니다.
의 OutputStreamWriter 바이트의 출력 스트림은 문자 출력 스트림으로 변환 된 상기 문자 스트림을 입력으로 바이트의 입력 스트림 InputStreamReader . 사용 감형 왜곡이 어느 정도 방지 할 수 있습니다, 당신은 또한 입력과 출력에 사용되는 문자 집합을 지정할 수 있습니다.
출력 java.txt "바이 검색 엔진"은 여섯 개 단어 java.txt는 "UTF-8"포맷으로 저장되고, 다음 코드에 의해 바이트 스트림 읽
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("D://java.txt");
int b = 0;
while ((b = fis.read()) != -1) {
System.out.print((char) b);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
출력은 ???, 우리는 중국 깨진 것을 알 수있다. 문자열 인코딩 형식을 설정함으로써 혼입 다음 바이트 배열을 명시 적으로는 다음과 같은 :
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("D://java.txt");
byte b[] = new byte[1024];
int len = 0;
while ((len = fis.read(b)) != -1) {
System.out.print(new String(b, 0, len, "UTF-8"));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
이 출력에서 Baidu 검색 엔진이지만, 텍스트의 큰 저장, 거기에 올바른 질문을 디코딩 할 것이며, 바이트 길이가 컨텐츠를 디코딩에 따라 자동으로 설정 할 수없는 경우에, 당신은 변환 흐름을 완료해야합니다. 다음과 같이 코드입니다 :
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("D://java.txt");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
int b = 0;
while ((b = isr.read()) != -1) {
System.out.print((char) b); // 输出结果为“百度搜索引擎”
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
예를 들어 키보드 입력 스트림 변환의 사용을 소개합니다 . 자바 System.in 표준 출력, 즉 키보드 입력을 표시 사용하지만,이 표준 입력 스트림의 InputStream 클래스의 예입니다, 사용이 불편뿐만 아니라 키보드 입력 내용이 텍스트 내용이며, 그것은 InputStreamReader 문자 입력 스트림로 변환 할 수 있습니다, 일반 독자가 입력 내용이 여전히 매우 편리하지 않습니다 읽을 때, 당신은 한 줄을 읽어에서는 ReadLine의 BufferedReader () 메소드를 사용하여,의 BufferedReader로 패키지 일반 다시 리더가 될 수 있습니다. 다음 절차에 나타낸 바와 같이.
public static void main(String[] args) {
try {
// 将 System.in 对象转换成 Reader 对象
InputStreamReader reader = new InputStreamReader(System.in);
// 将普通的Reader 包装成 BufferedReader
BufferedReader br = new BufferedReader(reader);
String line = null;
// 利用循环方式来逐行的读取
while ((line = br.readLine()) != null) {
// 如果读取的字符串为“exit”,则程序退出
if (line.equals("exit")) {
System.exit(1);
}
// 打印读取的内容
System.out.println("输入内容为:" + line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
이 판독되지 않은 경우 상기 코드 라인 (4) 및 완충 기능을 갖는 패키지의 BufferedReader, BufferReader 스트림 System.in 6 행은, 그 행 바꿈에 의해 표시된 텍스트의 라인을 읽을 수 있으며, 줄 바꿈이 루틴은 판독 될 때까지 차단 줄 바꿈까지. 입력을 수행 할 수있는 콘솔에서이 기능을 찾을 수 위의 프로그램을 실행, 프로그램 만 방금 입력 한 내용을 출력 할 것이다, Enter 키를 누르십시오.
내의 readLine의 BufferedReader ()를 갖는 방법 때문에 쉽게 자주 텍스트 손쉽게 텍스트 입력 스트림을 판독하기 위해, 상기 입력 스트림의 BufferedReader 포장에 판독하고, 한 라인에서 판독 할 수있다.