从BufferReader读取并写入文件

时间:2018-04-09 10:31:29

标签: java file sockets

我正在尝试使用(客户端)读取文件:

InputStream is = clientSocket.getInputStream();
DataOutputStream os = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(is));            
FileOutputStream fos = new FileOutputStream(".\\Recibido\\" + recurso);                

while (br.ready()) {
    c = br.read();
    //  System.out.println((char) c);
    fos.write((byte) c);
    fos.flush();

}

fos.close();

但是我没有得到左边的字节,而是获得了右边的字节: SCREENSHOT

这不是发送不同字节的问题,我知道服务器端是正确的,因为我可以使用不同的方法读取它,但我必须使用这个。我怀疑的是为什么我会变得与众不同?当我使用“fos.write((byte)c);”?

时,我是否进行了错误的转换

1 个答案:

答案 0 :(得分:0)

这有点混乱。编码。评论员是正确的,你不应该在这里使用读者,他们是用于文本。

我怀疑发生的事情如下:

  1. 您使用Reader读取字节流,这是使用系统默认字符集将字节解码为字符。
  2. 请注意,在内部,Java字符是UTF-16
  3. 当你转换为字节时,你会截断UTF-16值的一部分,这就是为什么对于更普通的字符,你得到的是正确的值,而不是那些不应该有一个的额外字节
  4. 然后将截断的UTF-16值写入输出。显然,你必须非常幸运才能成为原始价值。
  5. 经验教训:

    1. 不要将读者/写作者与字节流混合。
    2. 不要将char转换为byte
    3. 指定读者/作家的编码