您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“dataoutputstream亂碼如何解決”,內容詳細,步驟清晰,細節處理妥當,希望這篇“dataoutputstream亂碼如何解決”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
dataoutputstream亂碼的解決辦法:1、通過“dos.write("...".getBytes());”方式寫入String;2、設置“new OutputStreamWriter(new FileOutputStream(file), "utf-8");”即可。
解決DataOutputStream亂碼的問題
這個坑我就先踩為敬了,重要的話說三遍!
千萬不要用DataOutputStream的 writeBytes 方法
千萬不要用DataOutputStream的 writeBytes 方法
千萬不要用DataOutputStream的 writeBytes 方法
我們使用 DataOutputStream 的時候,比如想寫入String ,你就會看到三個方法
public final void writeBytes(String s)
public final void writeChars(String s)
public final void writeUTF(String str)
OK,那你試著去寫入相同的內容后,再去讀取一下試試
File file = new File("d:"+File.separator+"test.txt");
DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
dos.writeBytes("你好");
dos.writeChars("你好");
dos.writeUTF("你好");
dos.flush();
dos.close();
DataInputStream dis = new DataInputStream(new FileInputStream(file));
byte[] b = new byte[2];
dis.read(b);
// `}
System.out.println(new String(b, 0, 2));
char[] c = new char[2];
for (int i = 0; i < 2; i++) {
c[i] = dis.readChar();
}
//你好
System.out.println(new String(c, 0, 2));
//你好
System.out.println(dis.readUTF());
是的,你沒看錯,writeBytes方法寫入的內容讀出來,為啥亂碼了?
點進去看看實現
public final void writeBytes(String s) throws IOException {
int len = s.length();
for (int i = 0 ; i < len ; i++) {
out.write((byte)s.charAt(i));
}
incCount(len);
}
大哥,這char類型被強轉為 byte類型了,失精度了呀,怪不得回不來了,所以使用的時候千萬別貪方便,老老實實換成 dos.write("你好".getBytes()); 都好的呀
這是正常的,如果要讀,要用DataInputStream讀出,如果僅要保成文本文件直接要FileOutputStream或PrintWriter
OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
oStreamWriter.append(str);
oStreamWriter.close();
主要是編碼方式不一樣,要用字符流 而非字節流,BufferedReader類從字符輸入流中讀取文本并緩沖字符,以便有效地讀取字符,數組和行。
讀到這里,這篇“dataoutputstream亂碼如何解決”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。