您的当前位置:首页正文

解决DataOutputStream乱码的问题

2020-12-17 来源:汇智旅游网
解决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类从字符输⼊流中读取⽂本并缓冲字符,以便有效地读取字符,数组和⾏以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容