자바 변환 흐름

정상적인 상황에서는, 모든 데이터 조작에 대한 바이트 스트림이 될 수 있지만, 때때로 우리는 예를 들어, 중국어 문자의 텍스트를 볼 때하는 것이 더 편리한 스트림을 채택 할 필요가있다, 일부 텍스트 문자 스트림 처리하기 위해 사용하는 경우. 그래서 자바 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 포장에 판독하고, 한 라인에서 판독 할 수있다.

게시 된 457 개 원래 기사 · 원 찬양 94 ·은 10000 +를 볼

추천

출처blog.csdn.net/weixin_45743799/article/details/104711113