解决DataOutputStream乱码的问题

我们使用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()); 都好的呀

收藏 (0)
评论列表
正在载入评论列表...
我是有底线的
为您推荐
    暂时没有数据