Was tun, wenn der gepufferte Eingabestream verstümmelt ist?
bufferedinputstream乱码是因为BufferedInputStream读取的是字节byte,那么如果读取的数据比较长,并且没有一次性读完,就会出现乱码,其解决乱码问题的办法就是用BufferedReader来读取,其读取代码如“BufferedReader reader = new BufferedReader (...)”。
本教程操作环境:Windows10系统、Java8.0、Dell G3电脑。
bufferedinputstream乱码怎么办?
BufferedInputStream和BufferedOutputStream用法解决乱码
昨晚写了一个把所有的简体汉字转换成繁体并且取出拼音的程序,在IO流操作中遇到了中文乱码问题。
下面是我写的程序
package com.java.utils.charactor; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; /** * 简繁体转换 * * @author pengjianbo <pengjianbosoft@gmail.com> * $Id$ */ public class SimTradConvert { public SimTradConvert() throws Exception { File simplFile = new File( "D:\\android\\JavaUtils\\src\\com\\java\\utils\\charactor\\simplified.txt"); FileInputStream simplFis = new FileInputStream(simplFile); BufferedInputStream simplBis = new BufferedInputStream(simplFis); BufferedReader simplBr = new BufferedReader(new InputStreamReader(simplBis)); StringBuffer simplsb = new StringBuffer(); byte[] simplb = new byte[1024]; while ((simplBis.read(simplb)) != -1) { simplsb.append(new String(simplb)); } simplFis.close(); simplBis.close(); File tradFile = new File( "D:\\android\\JavaUtils\\src\\com\\java\\utils\\charactor\\traditional.txt"); FileInputStream tradFis = new FileInputStream(tradFile); BufferedInputStream tradBis = new BufferedInputStream(tradFis); StringBuffer tradsb = new StringBuffer(); byte[] tradb = new byte[1024]; while ((tradBis.read(tradb)) != -1) { tradsb.append(new String(tradb)); } tradBis.close(); tradFis.close(); System.out.println(simplsb.toString()); /*CnGetPinyin pinyin = new CnGetPinyin(); //连接SQLite的JDBC Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection("jdbc:sqlite:pai.db"); Statement stat = conn.createStatement(); for(int i = 0; i < simplsb.length() -1; i++ ) { stat.executeUpdate( "insert into CNLang(pinyin,simp,trad) values('" + pinyin.getPinyin(simplsb.substring(i, i + 1)) + "','" + simplsb.substring(i, i + 1) + "','" + tradsb.substring(i, i + 1) + "')"); System.out.println("正在添加:" + simplsb.substring(i, i + 1) + "-->" + tradsb.substring(i, i + 1)); if( i > simplsb.length() -1 ) { stat.close(); conn.close(); } }*/ } public static void main(String[] args) throws Exception { new SimTradConvert(); } }
在我的这个程序中,用BufferedInputStream,而且用了read(byte[]),就出了读取出来现在部分的中文乱码,我想是我这个byte[] tradb = new byte[1024];缓冲大小设置的问题,试图去更改byte[]的在小,结果出现乱码的地方和原先的不一样了。也就说明了,在缓冲的末尾的时候出了问题,末尾的那个字节容纳不了一个汉字,所以出现的乱码。我想如果用read()去读取的话应该不会出现这个问题的(没试过)。像我的这种读取大量的中文数据我想我宁愿用read去读,大不了就开一个线程嘛。
下面是我看到网上别人写的博客:后来在网上找一下资料,转载如下:
BufferedInputStream和BufferedOutputStream是过滤流,需要使用已存在的节点来构造,即必须先有InputStream或OutputStream,相对直接读写,这两个流提供带缓存的读写,提高了系统读写效率性能.BufferedInputStream读取的是字节byte,因为一个汉字占两个字节,而当中英文混合的时候,有的字符占一个字节,有的字符占两个字节,所以如果直接读字节,而数据比较长,没有一次读完的时候,很可能刚好读到一个汉字的前一个字节,这样,这个中文就成了乱码,后面的数据因为没有字节对齐,也都成了乱码.所以我们需要用BufferedReader来读取,它读到的是字符,所以不会读到半个字符的情况,不会出现乱码.
package com.pocketdigi; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { File f = new File("d:/a.txt"); FileOutputStream fos = new FileOutputStream(f); // 构建FileOutputStream对象,文件不存在会自动新建 BufferedOutputStream bos = new BufferedOutputStream(fos); bos.write("1我是中文".getBytes()); bos.close(); // 关闭输出流,写入数据,如果下面还要写用flush(); // 因为是BufferOutputStream链接到FileOutputStream,只需关闭尾端的流 // 所以不需要关闭FileOutputStream; FileInputStream fis = new FileInputStream(f); BufferedInputStream bis = new BufferedInputStream(fis); BufferedReader reader = new BufferedReader (new InputStreamReader(bis)); //之所以用BufferedReader,而不是直接用BufferedInputStream读取,是因为BufferedInputStream是InputStream的间接子类, //InputStream的read方法读取的是一个byte,而一个中文占两个byte,所以可能会出现读到半个汉字的情况,就是乱码. //BufferedReader继承自Reader,该类的read方法读取的是char,所以无论如何不会出现读个半个汉字的. StringBuffer result = new StringBuffer(); while (reader.ready()) { result.append((char)reader.read()); } System.out.println(result.toString()); reader.close(); } }
推荐学习:《Java视频教程》
Das obige ist der detaillierte Inhalt vonWas tun, wenn der gepufferte Eingabestream verstümmelt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Lösung für verstümmelte Word-Seitenzahlen: 1. Öffnen Sie das Word-Dokument und klicken Sie auf die Option „Datei“ in der oberen linken Ecke. 2. Wählen Sie die Option „Mehr“ und klicken Sie dann auf die Schaltfläche „Optionen“. 3. Wählen Sie „Erweitert“. 4. Suchen Sie unter „Dokumentinhalt anzeigen“ nach „Feldcodes anzeigen“, entfernen Sie das Häkchen vor und klicken Sie auf „OK“, um zur Startseite zurückzukehren.

Das verstümmelte Linux-Chinesisch-Problem ist ein häufiges Problem bei der Verwendung chinesischer Zeichensätze und Kodierungen. Verstümmelte Zeichen können durch falsche Dateikodierungseinstellungen, nicht installiertes oder eingestelltes Systemgebietsschema, Konfigurationsfehler bei der Terminalanzeige usw. verursacht werden. In diesem Artikel werden mehrere gängige Problemumgehungen vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Überprüfen Sie die Dateikodierungseinstellung. Verwenden Sie den Dateibefehl im Terminal, um die Kodierung der Datei anzuzeigen: file-ifilename

Lösungen für den verstümmelten Start von Tomcat: 1. Ändern Sie die Konfigurationsdatei von Tomcat. 3. Ändern Sie die Codierung des Befehlszeilenfensters. 5. Überprüfen Sie die Projektcodierung Datei; 7, versuchen Sie es mit anderen Lösungen. Detaillierte Einführung: 1. Ändern Sie die conf-Konfigurationsdatei von Tomcat, öffnen Sie das conf-Verzeichnis von Tomcat, suchen Sie die Datei „logging.properties“ usw.

Im Windows 10-System sind verstümmelte Zeichen häufig. Der Grund dafür ist häufig, dass das Betriebssystem einige Zeichensätze nicht standardmäßig unterstützt oder dass ein Fehler in den eingestellten Zeichensatzoptionen vorliegt. Um das richtige Medikament zu verschreiben, analysieren wir im Folgenden die tatsächlichen Betriebsabläufe im Detail. So lösen Sie verstümmelten Windows 10-Code: 1. Öffnen Sie die Einstellungen und suchen Sie nach „Zeit und Sprache“. 2. Suchen Sie dann nach „Sprache“. 3. Suchen Sie nach „Spracheinstellungen verwalten“. 4. Klicken Sie hier auf „Regionale Systemeinstellungen ändern“. 5. Überprüfen Sie, wie gezeigt, und klicken Sie Stellen Sie einfach sicher.

Lösung für verstümmelte chinesische Zeichen in Linux tty: 1. Laden Sie die Schriftart fbterm über den Befehl „sudo apt-get install fbterm“ herunter. 2. Führen Sie den Befehl „sudo fbterm“ aus. 3. Ändern Sie die Schriftart und -größe in „font-names“. =Ubuntu Mono-Schriftgröße = 14 Zoll ist ausreichend.

Wie kann das Problem verstümmelter Textdokumente in Win11 gelöst werden? Wenn viele Benutzer das Win11-System verwenden, sind Textdokumente verstümmelt und können nicht normal gelesen werden. Viele Freunde wissen nicht, wie sie dieses Problem lösen können. Tatsächlich ist diese Methode nicht schwierig. Im Folgenden hat der Herausgeber die Schritte zur Lösung des Problems verstümmelter Windows 11-Systemdokumente zusammengestellt. Schritte zum Auflösen verstümmelter Windows 11-Systemdokumente: 1. Öffnen Sie zunächst die Systemsteuerung von Win11, geben Sie „Systemsteuerung“ in das Suchfeld unten ein und klicken Sie auf „Suchen“, um die Systemsteuerung aufzurufen. 2. Nachdem Sie das Panel betreten haben, suchen Sie die Uhr und den Bereich, klicken Sie zum Betreten und klicken Sie dann auf die Bereichsoption. 3. Klicken Sie nach der Eingabe auf das Verwaltungsfeld und dann auf „Regionale Einstellungen des Systems ändern“.

Zu den Lösungen für verstümmelte Filezilla-Zeichen gehören: 1. Überprüfen Sie die Datei selbst. 3. Überprüfen Sie die Serverkonfiguration. 6. Überprüfen Sie, ob es Netzwerkprobleme gibt . Suchen Sie technischen Support. Um das Problem der verstümmelten FileZilla-Zeichen zu lösen, müssen Sie von mehreren Aspekten ausgehen, schrittweise die Ursache des Problems untersuchen und entsprechende Maßnahmen ergreifen, um es zu beheben.

Wenn viele Benutzer Computer verwenden, werden sie feststellen, dass es viele Dateien mit der Endung dll gibt, aber viele Benutzer wissen nicht, wie man solche Dateien öffnet. Wer es wissen möchte, schaut sich bitte die folgenden Details an So öffnen und bearbeiten Sie DLL-Dateien: 1. Laden Sie eine Software namens „Exescope“ herunter, laden Sie sie herunter und installieren Sie sie. 2. Klicken Sie dann mit der rechten Maustaste auf die DLL-Datei und wählen Sie „Ressourcen mit Exescope bearbeiten“. 3. Klicken Sie dann im Popup-Fehlerfeld auf „OK“. 4. Klicken Sie dann im rechten Bereich auf das „+“-Zeichen vor jeder Gruppe, um den darin enthaltenen Inhalt anzuzeigen. 5. Klicken Sie auf die DLL-Datei, die Sie anzeigen möchten, klicken Sie dann auf „Datei“ und wählen Sie „Exportieren“. 6. Dann können Sie