dataoutputstream亂碼的解決方法:1、透過「dos.write("...".getBytes());」方式寫入String;2、設定「new OutputStreamWriter(new FileOutputStream(file), "utf-8");」即可。
本教學操作環境:Windows10系統、Java8.0版、Dell G3電腦。
dataoutputstream亂碼怎麼辦?
解決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類從字符輸入流中讀取文本並緩衝字符,以便有效地讀取字符,數組和行
#推薦學習: 《Java影片教學》
以上是dataoutputstream亂碼怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!