Inhaltsverzeichnis
四、字符流写数据的五种方法
五、字符流读数据的两种方法
Heim Java javaLernprogramm Beispielanalyse eines Java-Zeichenstroms

Beispielanalyse eines Java-Zeichenstroms

Apr 28, 2023 pm 04:40 PM
java

1. Ursprung des Zeichenstroms Gibt es ein Problem beim Kopieren von Textdateien mit chinesischen Zeichen im Bytestream?

      Weil die zugrunde liegende Operation Bytes automatisch in Chinesisch zusammenfügt.
Wie erkennt man, dass das Byte chinesisch ist?

Wenn chinesische Zeichen gespeichert werden, sei es UTF-8 oder GBK, ist das erste Byte eine negative Zahl zur Eingabeaufforderung

2. Codierungstabelle

Zeichensatz:

ist ein Satz aller vom System unterstützten Zeichen. einschließlich nationaler Zeichen, Satzzeichen, grafischer Symbole, Zahlen usw.

Um verschiedene Zeichensatzsymbole genau zu speichern und zu erkennen, muss ein Computer eine Zeichenkodierung durchführen. Ein Satz von Zeichensätzen muss mindestens einen Satz von Zeichenkodierungen haben

Zu den gängigen Zeichensätzen gehören der ASCII-Zeichensatz, der GBXXX-Zeichensatz, der Unicode-Zeichensatz usw.

GBK: Die am häufigsten verwendete chinesische Codetabelle ist eine erweiterte Spezifikation, die auf dem GB2312-Standard basiert. Sie verwendet ein Doppelbyte-Codierungsschema und enthält eine Insgesamt 21.003 chinesische Schriftzeichen. Es ist vollständig kompatibel mit dem GB2312-Standard und unterstützt auch traditionelle chinesische Schriftzeichen, japanische und koreanische chinesische Schriftzeichen usw.

GB18030: Die neueste chinesische Codetabelle mit 70244 chinesischen Schriftzeichen und Multibyte-Kodierung. Jedes Zeichen kann aus 1, 2 oder 4 Bytes bestehen. Unterstützt die Zeichen chinesischer ethnischer Minderheiten sowie traditionelle chinesische Zeichen, japanische und koreanische chinesische Zeichen usw.

Unicode-Zeichensatz:

Entwickelt, um jedes Zeichen in jeder Sprache auszudrücken, ist es ein auch bekannter Standard in der Branche als Unicode und Standard-Unicode; es werden bis zu 4 Bytes an Zahlen verwendet, um jeden Buchstaben, jedes Symbol oder jeden Text darzustellen. Es gibt drei Codierungsschemata: UTF-8, UTF-16, UTF32. Das am häufigsten verwendete ist UTF-8

UTF-8: Es kann zur Darstellung jedes Zeichens im Unicode-Standard verwendet werden Seiten und andere Speicherung oder Übertragung Bei Dateianwendungen wird die Kodierung bevorzugt. Die Internet Working Group fordert, dass alle Internetprotokolle das UTF-8-Kodierungsformat unterstützen müssen. Zur Codierung jedes Zeichens werden ein bis vier Bytes verwendet.

UTF-8-Codierungsregeln:

128 US-ASCII-Zeichen, benötigen nur ein Byte zum Codieren.

Lateinische und andere Zeichen benötigen zwei Bytes zum Codieren.

Am häufigsten verwendete Zeichen (einschließlich Chinesisch) werden mit drei Bytes codiert

Andere selten verwendete UniCode-Hilfszeichen werden mit vier Bytes codiert

Zusammenfassung: Welche Art von Regeln werden beim Codieren verwendet und entsprechende Regeln müssen zum Decodieren verwendet werden, sonst wird es verstümmelt

3. Codierungs- und Decodierungsprobleme in Strings

Codierungsmethode (IDEA):

byte[] getBytes(): Verwenden Sie den Standardzeichensatz der Plattform, um den String in eine Reihe von Bytes zu codieren, und konvertieren Sie das Ergebnis in einen neues Byte-Array

byte[] getBytes(String charsetName): Verwenden Sie den angegebenen Zeichensatz, um den String in eine Reihe von Bytes zu kodieren und das Ergebnis in einem neuen Byte-Array zu speichern

Dekodierungsmethode (IDEA):

String( byte[]bytes): Konstruiert einen neuen String durch Dekodierung des angegebenen Byte-Arrays mit dem Standardzeichensatz der Plattform.

String(byte[]bytes,String charsetName): Dekodierung des angegebenen Byte-Arrays mit dem Standardzeichensatz der Plattform. Zu erstellendes Byte-Array ein neuer String

Das Standardkodierungsformat in IDEA ist UTF-8

IV Probleme bei der Kodierung und Dekodierung des Zeichenstroms

Abstrakte Basisklasse des Zeichenstroms:

Reader: Abstrakte Klasse des Zeicheneingabestroms

Writer: Abstrakte Klasse von Zeichenausgabestrom

Zwei Klassen im Zusammenhang mit Kodierungs- und Dekodierungsproblemen im Zeichenstrom:

InputStreamReader: Es ist eine Brücke vom Bytestrom zum Zeichenstrom: Es liest Bytes und verwendet einen angegebenen Zeichensatz, um ihn in Zeichen zu dekodieren. Der verwendete Zeichensatz kann namentlich angegeben, explizit angegeben werden oder den Standardzeichensatz der Plattform akzeptieren.

Konstruktormethode:

InputStreamReader(InputStream in)

Erstellen Sie einen InputStreamReader, der den Standardzeichensatz verwendet .

InputStreamReader(InputStream in, String charsetName)

Erstellt einen InputStreamReader, der einen benannten Zeichensatz verwendet. Konstruktionsmethode: OutputStreamWriter(OutputStream out) Erstellen Sie einen OutputStreamWriter mit der Standardzeichenkodierung.
OutputStreamWruter: Es ist eine Brücke vom Zeichenstrom zum Bytestrom: Es verwendet einen benutzerdefinierten Zeichensatz, um geschriebene Zeichen in Bytes zu kodieren. Der verwendete Zeichensatz kann namentlich angegeben oder explizit angegeben werden Standardzeichensatz der Plattform

OutputStreamWriter(OutputStream out, String charsetName)

Erstellen Sie einen OutputStreamWriter, der einen benannten Zeichensatz verwendet.
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();

    }
}
Nach dem Login kopieren

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

方法名说明
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();//如果需要在文件中立即显示输入的数据,就需要加入刷新方法
    }
}
Nach dem Login kopieren

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

方法名说明
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();
    }
}
Nach dem Login kopieren

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

Das obige ist der detaillierte Inhalt vonBeispielanalyse eines Java-Zeichenstroms. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

See all articles