Rumah  >  Artikel  >  Java  >  Apa yang perlu dilakukan jika aliran keluaran data bercelaru?

Apa yang perlu dilakukan jika aliran keluaran data bercelaru?

藏色散人
藏色散人asal
2023-01-05 11:28:5330667semak imbas

Penyelesaian kepada aliran dataoutput yang bercelaru: 1. Tulis String melalui "dos.write("...".getBytes());"; 2. Set "new OutputStreamWriter(new FileOutputStream(file), "utf- 8");" sudah memadai.

Apa yang perlu dilakukan jika aliran keluaran data bercelaru?

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 berbeza
OutputStreamWriter 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn