解決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,那你試著去寫入相同的內(nèi)容后,再去讀取一下試試
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方法寫入的內(nèi)容讀出來,為啥亂碼了?
點進去看看實現(xiàn)
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()); 都好的呀
DataOutputStream寫入txt文件數(shù)據(jù)亂碼
這是正常的,如果要讀,要用DataInputStream讀出,如果僅要保成文本文件直接要FileOutputStream或PrintWriter
OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "utf-8"); oStreamWriter.append(str); oStreamWriter.close();
主要是編碼方式不一樣
要用字符流 而非字節(jié)流
BufferedReader類從字符輸入流中讀取文本并緩沖字符,以便有效地讀取字符,數(shù)組和行
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
使用CORS實現(xiàn)JavaWeb跨域請求問題的方法
這篇文章主要介紹了使用Cors實現(xiàn)JavaWeb跨域請求問題的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
java中MultipartFile和File最簡單的互相轉換示例
這篇文章主要給大家介紹了關于java中MultipartFile和File最簡單的互相轉換的相關資料,MultipartFile和File都是Java中用于處理文件上傳的類,MultipartFile用于處理上傳的文件,File用于處理本地磁盤上的文件,需要的朋友可以參考下2023-09-09
Spring boot通過切面,實現(xiàn)超靈活的注解式數(shù)據(jù)校驗過程
這篇文章主要介紹了Spring boot通過切面,實現(xiàn)超靈活的注解式數(shù)據(jù)校驗過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringSecurity+jwt+redis基于數(shù)據(jù)庫登錄認證的實現(xiàn)
本文主要介紹了SpringSecurity+jwt+redis基于數(shù)據(jù)庫登錄認證的實現(xiàn),其中也涉及到自定義的過濾器和處理器,具有一定的參考價值,感興趣的可以了解一下2023-09-09

