首頁 > Java > Java基礎 > 主體

dataoutputstream亂碼怎麼辦

藏色散人
發布: 2023-01-05 11:28:53
原創
30654 人瀏覽過

dataoutputstream亂碼的解決方法:1、透過「dos.write("...".getBytes());」方式寫入String;2、設定「new OutputStreamWriter(new FileOutputStream(file), "utf-8");」即可。

dataoutputstream亂碼怎麼辦

本教學操作環境: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()); 都好的呀

DataOutputStream寫入txt檔案資料亂碼

#這是正常的,如果要讀,要用DataInputStream讀出,如果僅要保成文字檔案直接要FileOutputStream或PrintWriter

OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
oStreamWriter.append(str);
oStreamWriter.close();
登入後複製

主要是編碼方式不一樣

要用字符流而不是字節流

BufferedReader類從字符輸入流中讀取文本並緩衝字符,以便有效地讀取字符,數組和行

#推薦學習: 《Java影片教學

以上是dataoutputstream亂碼怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!