繁体   English   中英

从BufferReader读取并写入文件

[英]Read from BufferReader and writing into file

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

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. 您使用读取器读取字节流,这是使用系统默认的字符集将字节解码为字符。
  2. 请注意,在内部,Java字符为UTF-16
  3. 当转换为字节时,您会截断UTF-16值的一部分,这就是为什么对于更普通的字符,您将获得正确的值,而不是不应有1个字节的附加字节的原因
  4. 然后,将截断的UTF-16值写入输出。 显然,您必须非常幸运地将其作为原始价值。

得到教训:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM