목차
1. 문자 스트림의 기원
2. 인코딩 테이블
문자 집합:
유니코드 문자 세트:
UTF-8 인코딩 규칙:
3. 문자열의 인코딩 및 디코딩 문제
인코딩 방법(IDEA):
Decoding 메서드(IDEA ):
IV입니다. 문자 스트림 인코딩 및 디코딩 문제
四、字符流写数据的五种方法
五、字符流读数据的两种方法
Java java지도 시간 Java 문자 스트림 예제 분석

Java 문자 스트림 예제 분석

Apr 28, 2023 pm 04:40 PM
java

    1. 문자 스트림의 기원

    바이트 스트림을 사용하여 중국어를 제어하는 ​​것은 그리 편리하지 않기 때문에 Java는 중국어를 제어하기 위해 문자 스트림을 제공합니다.

    구현 원리: 바이트 스트림 + 인코딩 테이블

    사용 이유 바이트 스트림에 한자가 포함된 텍스트 파일을 복사할 때 문제가 있습니까?

    기본 작업이 자동으로 바이트를 중국어로 분할하기 때문입니다.

    바이트가 중국어인지 어떻게 식별할 수 있나요?

    한자가 저장될 때 UTF-8이든 GBK이든 첫 번째 바이트는 음수로 프롬프트됩니다.

    2. 인코딩 테이블

    문자 집합:

    은 시스템에서 지원하는 모든 문자의 집합입니다. 국가 문자, 문장 부호, 그래픽 기호, 숫자 등을 포함합니다.

    다양한 문자 집합 기호를 정확하게 저장하고 인식하려면 컴퓨터에서 문자 인코딩을 수행해야 합니다. 문자 집합에는 하나 이상의 문자 인코딩 집합이 있어야 합니다.

    일반적인 문자 세트에는 ASCII 문자 세트, GBXXX 문자 세트, 유니코드 문자 세트 등이 포함됩니다.

    GBK: 가장 일반적으로 사용되는 중국어 코드 테이블은 GB2312 표준을 기반으로 하는 확장 사양이며 더블바이트 인코딩 체계를 사용합니다. 총 21,003개의 중국어 문자가 GB2312 표준과 완벽하게 호환되며 중국어 번체, 일본어 및 한국어 한자 등도 지원합니다.

    GB18030: 멀티바이트 인코딩을 사용하여 70244개의 한자를 포함하는 최신 중국어 코드 테이블입니다. 각 문자는 1, 2 또는 4바이트로 구성될 수 있습니다. 중국 소수민족의 문자는 물론 번체자, 일본어, 한국어 한자 등을 지원합니다.

    유니코드 문자 세트:

    모든 언어의 모든 문자를 표현하도록 설계되었으며 업계 표준이기도 합니다. 유니코드 및 표준 유니코드로 각 문자, 기호 또는 텍스트를 표시하기 위해 최대 4바이트의 숫자를 사용합니다. UTF-8, UTF-16, UTF32의 세 가지 인코딩 방식이 있습니다. 가장 일반적으로 사용되는 것은 UTF-8

    UTF-8입니다. 유니코드 표준의 모든 문자를 나타내는 데 사용할 수 있습니다. 페이지 및 기타 저장 또는 전송 파일 응용 프로그램에서는 인코딩이 선호됩니다. 인터넷 작업 그룹에서는 모든 인터넷 프로토콜이 UTF-8 인코딩 형식을 지원해야 한다고 요구합니다. 각 문자를 인코딩하는 데 1~4바이트를 사용합니다.

    UTF-8 인코딩 규칙:

    128 US-ASCII 문자, 인코딩하는 데 1바이트만 필요합니다.

    라틴 문자 및 기타 문자를 인코딩하는 데 2바이트가 필요합니다.

    가장 일반적으로 사용되는 문자 (중국어 포함)은 3바이트로 인코딩됩니다

    기타 거의 사용되지 않는 UniCode 보조 문자는 4바이트로 인코딩됩니다

    요약: 인코딩 시 어떤 종류의 규칙이 사용되며, 디코딩 시 해당 규칙을 사용해야 합니다. 그렇지 않으면 왜곡됩니다.

    3. 문자열의 인코딩 및 디코딩 문제

    인코딩 방법(IDEA):

    byte[] getBytes(): 플랫폼의 기본 문자 집합을 사용하여 문자열을 일련의 바이트로 인코딩하고 결과를 새 바이트 배열

    byte[] getBytes(String charsetName): 지정된 문자 세트를 사용하여 문자열을 일련의 바이트로 인코딩하고 결과를 새 바이트 배열에 저장합니다

    Decoding 메서드(IDEA ):

    String( byte[]bytes): 플랫폼의 기본 문자 집합을 사용하여 지정된 바이트 배열을 디코딩하여 새 문자열을 구성합니다.

    String(byte[]bytes,String charsetName): 플랫폼의 기본 문자 집합을 사용하여 지정된 바이트 배열을 디코딩하여 바이트 배열을 구성합니다. 새로운 문자열

    IDEA의 기본 인코딩 형식은 UTF-8

    IV입니다. 문자 스트림 인코딩 및 디코딩 문제

    문자 스트림 추상 기본 클래스:

    Reader: 문자 입력 스트림의 추상 클래스

    Writer: 추상 클래스 문자 출력 스트림

    문자 스트림의 인코딩 및 디코딩 문제와 관련된 두 가지 클래스:

    InputStreamReader: 바이트 스트림에서 문자 스트림으로의 브리지입니다. 바이트를 읽고 지정된 문자 세트를 사용하여 문자로 디코딩합니다. 사용하는 문자 집합은 이름으로 지정하거나 명시적으로 지정할 수 있거나 플랫폼의 기본 문자 집합을 허용할 수 있습니다.

    Constructor 메서드:

    InputStreamReader(InputStream in) 기본 문자 집합을 사용하는 InputStreamReader 만들기 .
    InputStreamReader(InputStream in, String charsetName) 이름이 지정된 문자 집합을 사용하는 InputStreamReader를 만듭니다.

    OutputStreamWruter: 문자 스트림에서 바이트 스트림으로의 연결입니다. 사용자 정의 문자 세트를 사용하여 작성된 문자를 바이트로 인코딩합니다. 사용하는 문자 세트는 이름으로 지정하거나 명시적으로 지정할 수 있습니다. 플랫폼의 기본 문자 집합

    구성 방법:

    OutputStreamWriter(OutputStream out) 기본 문자 인코딩을 사용하여 OutputStreamWriter를 생성합니다.
    OutputStreamWriter(OutputStream out, String charsetName) 이름이 지정된 문자 집합을 사용하는 OutputStreamWriter를 만듭니다.
    public class ConversionStreamDemo {
        public static void main(String[] args) throws IOException {
            //创建一个默认编码格式的InputStreamReader\OutputStreamWriter
            InputStreamReader ipsr = new InputStreamReader(new FileInputStream("E:\\abc.txt"));
            OutputStreamWriter opsw = new OutputStreamWriter(new FileOutputStream("E:\\abc.txt"));
            //写入数据
            opsw.write("你好啊");
            opsw.close();
            //读数据,方式一:一次读取一个字节数据
            int ch;
            while ((ch = ipsr.read()) != -1) {
                System.out.print((char) ch);
            }
            ipsr.close();
    
        }
    }
    로그인 후 복사

    四、字符流写数据的五种方法

    方法名说明
    void write(int c) 写一个字符
    void write(char[] cbuf)写入一个字符数组
    void write(char[] cbuf,int off,int len)写入字符数组的一部分
    void write(String str)写入一个字符串
    void write(String str,int off,int len)写入一个字符串的一部分

    字符流写数据需要注意缓冲区的问题,如果想要将缓冲区的数据加载出来需要在写入方法后加上刷新方法flush();

    前三个方法与字节流写入方法使用相同,这里重点介绍下面两种方式

    public class OutputStreamWriterDemo {
        public static void main(String[] args) throws IOException {
            //创建一个默认编码格式的OutputStreamWriter对象
            OutputStreamWriter opsw=new OutputStreamWriter(new FileOutputStream("E:\\abc.txt"));
            //方式一:写入一个字节
            opsw.write(97);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式二:写入一个字符数组
            char[]ch={'a','b','c','二'};
            opsw.write(ch);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式三:写入一个字符数组的一部分
            opsw.write(ch,0,2);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式四:写入一个字符串
            opsw.write("一二三");
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
            //方式五:写入一个字符串的一部分
            opsw.write("三四五",1,2);
            opsw.flush();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
        }
    }
    로그인 후 복사

    五、字符流读数据的两种方法

    方法名说明
    int read() 一次读取一个字符数据
    int read(char[] cbuf)一次读取一个字符数组数据
    public class InputStreamReadDemo {
        public static void main(String[] args) throws IOException {
            //创建一个默认编码格式的InputStreamReader
            InputStreamReader ipsr=new InputStreamReader(new FileInputStream("E:\\abc.txt"));
            //读取数据,方式一一次读取一个字符数据
            int ch;
            while ((ch=ipsr.read())!=-1){
                System.out.print((char) ch);
            }
            ipsr.close();
            //方式二:一次读取一个字符数组数据
            char []ch=new char[1024];
            int len;
            while ((len=ipsr.read(ch))!=-1){
                System.out.print(new String(ch,0,len));
            }
            ipsr.close();
        }
    }
    로그인 후 복사

    小结:如果使用默认编码格式的话,那么字符输入流InputStreamReader可以使用子类FileReader来替代,字符输出流OutputStreamWriter可以使用其子类FileWriter来替代,两者在使用默认编码格式的情况下作用一致。

    위 내용은 Java 문자 스트림 예제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    AI Hentai Generator

    AI Hentai Generator

    AI Hentai를 무료로 생성하십시오.

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    자바의 제곱근 자바의 제곱근 Aug 30, 2024 pm 04:26 PM

    자바의 제곱근 안내 여기서는 예제와 코드 구현을 통해 Java에서 Square Root가 어떻게 작동하는지 설명합니다.

    자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

    Java의 완전수 가이드. 여기서는 정의, Java에서 완전 숫자를 확인하는 방법, 코드 구현 예제에 대해 논의합니다.

    Java의 난수 생성기 Java의 난수 생성기 Aug 30, 2024 pm 04:27 PM

    Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

    자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

    Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

    자바의 암스트롱 번호 자바의 암스트롱 번호 Aug 30, 2024 pm 04:26 PM

    자바의 암스트롱 번호 안내 여기에서는 일부 코드와 함께 Java의 Armstrong 번호에 대한 소개를 논의합니다.

    Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

    Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

    Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

    이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

    Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

    Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

    See all articles