codestory

Die Anleitung zu Java InputStreamReader

View more Tutorials:

1- InputStreamReader

InputStreamReader ist eine Unterklasse von Reader. Er ist eine Brücke, damit Sie ein byte stream ins character stream umwandeln können. Oder anders gesagt, mit ihm können Sie ein InputStream ins Reader umwandeln.
Tipp: Um einen "InputStream" in einen "Reader" umzuwandeln, müssen Sie nur diese beiden Wörter hängen, um das Wort "InputStreamReader" zu bilden. Dann bekommen Sie eine Lösung des Problem.
InputStreamReader​ constructors
InputStreamReader​(InputStream in)    

InputStreamReader​(InputStream in, String charsetName)    

InputStreamReader​(InputStream in, Charset cs)    

InputStreamReader​(InputStream in, CharsetDecoder dec)

2- UTF-16 InputStreamReader

UTF-16 ist eine übliche Kode (encoding) für die chinesischen oder japanischen Text. In diesem Beispiel werden wir analysieren, wie InputStreamReader den Text UTF-16 lesen kann.
Zum ersten schauen Sie sich den japanischen Text an, der UTF-16 kodiert wird:
utf16-file-with-bom.txt
JP日本-八洲
Die volle Kode vom Beispiel:
InputStreamReader_UTF16_Ex1.java
package org.o7planning.inputstreamreader.ex;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class InputStreamReader_UTF16_Ex1 {

    // A file in UTF-16.
    private static final String fileURL = "https://s3.o7planning.com/txt/utf16-file-with-bom.txt";
    
    public static void main(String[] args) throws MalformedURLException, IOException {
        System.out.println(" --- Characters in Character Stream (InputStreamReader) ---");
        readAs_UTF16_Character_Stream();

        System.out.println();
        System.out.println(" --- Bytes in UTF-16 file ---");
        readAs_Binary_Stream();
    }

    private static void readAs_UTF16_Character_Stream() throws MalformedURLException, IOException {

        InputStream is = new URL(fileURL).openStream();
        InputStreamReader isr = new InputStreamReader(is, "UTF-16");

        int charCode;
        while ((charCode = isr.read()) != -1) { // Read each character.
            System.out.println((char) charCode + "  " + charCode);
        }
        isr.close();
    }

    private static void readAs_Binary_Stream() throws MalformedURLException, IOException {

        InputStream is = new URL(fileURL).openStream();

        int byteValue;
        while ((byteValue = is.read()) != -1) { // Read each byte.
            System.out.println((char) byteValue + "  " + byteValue);
        }
        is.close();
    }
}
Output:
 --- Characters in Character Stream (InputStreamReader) ---
J  74
P  80
日  26085
本  26412
-  45
八  20843
洲  27954

 --- Bytes in UTF-16 file ---
þ  254
ÿ  255
  0
J  74
  0
P  80
e  101
å  229
g  103
,  44
  0
-  45
Q  81
k  107
m  109
2  50
Erstellen Sie ein Objekt InputStreamReader mit dem Kodierung UTF-16, das um ein Objekt InputStream umgibt:
String url = "https://s3.o7planning.com/txt/utf16-file-with-bom.txt";

InputStream is = new URL(url).openStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-16");
Das folgende Bild zeigt die bytes in die File UTF-16 an. Die zwei ersten bytes (254, 255) wird verwendet um zu markieren, dass es einen Text UTF-16 beginnt.
UTF-16 InputStreamReader liest 2 ersten bytes um das Kodierungsstil des Text festzulegen und kenn, dass es mit einem Text UTF-16 arbeitet. Es verbindet zwei aufeinanderfolgende bytes um ein Zeichen zu bilden...

3- UTF-8 InputStreamReader

UTF-8 ist die weltweit üblichste Kodierung. Es kann alle Schriftarten der Welt kodieren, einschließlich chinesischer und japanischer Schriftzeichen. Jetzt werden wir analysieren, wie InputStreamReader die Texte UTF-8 liest.
Zum ersten schauen Sie den japansichen Text unten an. Er wird UTF-8 kodiert:
utf8-file-without-bom.txt
JP日本-八洲
Die volle Kode des Beispiel:
InputStreamReader_UTF8_Ex1.java
package org.o7planning.inputstreamreader.ex;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class InputStreamReader_UTF8_Ex1 {

    // A file with UTF-8 encoding (And without BOM (Byte Order Mark)).
    private static final String fileURL = "https://s3.o7planning.com/txt/utf8-file-without-bom.txt";
    
    public static void main(String[] args) throws MalformedURLException, IOException {
        System.out.println(" --- Characters in Character Stream (InputStreamReader) ---");
        readAs_UTF8_Character_Stream();

        System.out.println();
        System.out.println(" --- Bytes in UTF-8 file ---");
        readAs_Binary_Stream();
    }

    private static void readAs_UTF8_Character_Stream() throws MalformedURLException, IOException {
        
        InputStream is = new URL(fileURL).openStream();
        InputStreamReader isr = new InputStreamReader(is, "UTF-8");

        int charCode;
        while ((charCode = isr.read()) != -1) { // Read each character.
            System.out.println((char) charCode + "  " + charCode);
        }
        isr.close();
    }

    private static void readAs_Binary_Stream() throws MalformedURLException, IOException {

        InputStream is = new URL(fileURL).openStream();

        int byteValue;
        while ((byteValue = is.read()) != -1) { // Read each byte.
            System.out.println((char) byteValue + "  " + byteValue);
        }
        is.close();
    }
}
Output:
 --- Characters in Character Stream (InputStreamReader) ---
J  74
P  80
日  26085
本  26412
-  45
八  20843
洲  27954

 --- Bytes in UTF-8 file ---
J  74
P  80
æ  230
—  151
¥  165
æ  230
œ  156
¬  172
-  45
å  229
…  133
«  171
æ  230
´  180
²  178
Erstellen Sie ein Objekt InputStreamReader mit der Kodierung UTF-8, das um ein Objekt InputStream umgibt:
String url = "https://s3.o7planning.com/txt/utf8-file-without-bom.txt";

InputStream is = new URL(url).openStream();
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
Das folgende Bild zeigt die bytes in die File UTF-8:
Die Kodierung UTF-8 ist mehr komplizierter als UTF-16, sie braucht 1, 2, 3 oder 4 bytes um einen Zeichen zu speichern. Das hängt von der Zeichenskode ab.
Number of bytes   From To Byte 1 Byte 2 Byte 3 Byte 4
1 U+0000 0 U+007F 127 0xxxxxxx  
2 U+0080 128 U+07FF 2047 110xxxxx 10xxxxxx  
3 U+0800 2048 U+FFFF 65535 1110xxxx 10xxxxxx 10xxxxxx  
4 U+10000 65536 U+10FFFF 1114111 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Das folgende Bild ist ein Beispiel, in dem UTF-8 InputStreamReader  3 bytes von UTF-8 in ein 2 bytes Zeichen von Java wandelt:

View more Tutorials:

Vielleicht bist du interessiert

Das sind die Online-Courses außer der Website o7planning, die wir empfehlen. Sie können umsonst sein oder Discount haben.