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类从字符输⼊流中读取⽂本并缓冲字符,以便有效地读取字符,数组和⾏以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
因篇幅问题不能全部显示,请点此查看更多更全内容