Penyelesaian kepada aliran dataoutput yang bercelaru: 1. Tulis String melalui "dos.write("...".getBytes());"; 2. Set "new OutputStreamWriter(new FileOutputStream(file), "utf- 8");" sudah memadai.
Persekitaran pengendalian tutorial ini: sistem Windows 10, Java versi 8.0, komputer Dell G3.
Apakah yang perlu saya lakukan jika aliran keluaran data bercelaru?
Selesaikan masalah kod DataOutputStream bercelaru
Saya akan pijak lubang ini dahulu untuk menghormatinya, dan sebut perkara penting tiga kali!
Jangan sekali-kali gunakan kaedah writeBytes DataOutputStream
Jangan sekali-kali gunakan kaedah writeBytes DataOutputStream
Beribu-ribu Tidak pernah gunakan kaedah writeBytes DataOutputStream
Apabila kami menggunakan DataOutputStream, sebagai contoh, jika kami ingin menulis String, anda akan melihat tiga kaedah
public final void writeBytes(String s) public final void writeChars(String s) public final void writeUTF(String str)
OK , kemudian cuba tulis kandungan yang sama dan kemudian baca semula
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());
Ya, anda membacanya dengan betul, ia ditulis dengan kaedah writeBytes Apabila kandungan dibacakan, mengapa ia bercelaru?
Klik masuk untuk melihat pelaksanaan
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); }
Saudara, jenis aksara ini telah ditukar secara paksa kepada jenis bait, dan ketepatannya telah hilang tidak boleh dikembalikan. Oleh itu, jangan tamak untuk kemudahan apabila menggunakannya, cuma gantikan dengan dos.write("Hello".getBytes()); 🎜>
Ini perkara biasa jika anda ingin membaca, gunakan DataInputStream untuk membaca Jika anda hanya mahu menyimpannya sebagai fail teks, gunakan FileOutputStream atau PrintWriter Sebab utama ialah kaedah pengekodan berbezaOutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "utf-8"); oStreamWriter.append(str); oStreamWriter.close();Gunakan strim aksara dan bukannya strim bait
Kelas BufferedReader membaca teks daripada strim input aksara dan menampan aksara untuk membaca dengan cekap. aksara, tatasusunan dan baris
Pembelajaran yang disyorkan: "
Tutorial Video Java"
Atas ialah kandungan terperinci Apa yang perlu dilakukan jika aliran keluaran data bercelaru?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!