java中FileOutputStream write(int b)方法,

wanglf1207 2020-01-30 07:58:34
java中FileOutputStream write(int b)方法,如果有中文,写到控制台就有乱码?
如果写到TXT文件就不是乱码?
我们都知道,write(int b)这是方法是按字节写的(也就是8个二进制位),写到控制台乱码可以理解,为什么写到文件里乱码就没了呢?
难道是因为在写文件的情况下,全部写完输出流才关闭?总觉得这样解释有点牵强,请高手指点。


try {
logger.info("创建输入流");
in = new FileInputStream(filePath + "/src/main/java/com/demo/io/bytestream/" +
"outputstream/FileInputStreamAndFileOutputStreamDemo.java");

logger.info("创建输出流");
out = new FileOutputStream(filePath + "/tmp/io/" +
"FileInputStreamAndFileOutputStreamDemo.txt");

} catch (FileNotFoundException e) {
e.printStackTrace();
}
int i;
try {
// read() 从该输入流读取一个字节的数据。
while((i=in.read())!=-1) {
System.out.print((char)i);
out.write(i);
}
} catch (IOException e) {
e.printStackTrace();
}
...全文
196 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglf1207 2020-02-02
  • 打赏
  • 举报
回复
引用 4 楼 stacksoverflow 的回复:
你这完全是读取二进制数字,写二进制数字,相当于文件copy。 两个一模一样的东西,为什么会有乱码? 控制台乱码是因为你把它转成char输出了,一个一个char输出,不一定是完整的字符,所以会乱码。
貌似有道理
stacksoverflow 2020-01-31
  • 打赏
  • 举报
回复
你这完全是读取二进制数字,写二进制数字,相当于文件copy。 两个一模一样的东西,为什么会有乱码? 控制台乱码是因为你把它转成char输出了,一个一个char输出,不一定是完整的字符,所以会乱码。
wanglf1207 2020-01-30
  • 打赏
  • 举报
回复
我的思路是在写文件的时候,虽然是单个字节写入,但本质是append,全部写完之后整个流关闭。
wanglf1207 2020-01-30
  • 打赏
  • 举报
回复
引用 1 楼 Bangser 的回复:
可能是因为 文件的编码方式和输出流的编码一致,而控制台的编码方式与输出流的编码不一致
和编码还没啥关系
Faxon 2020-01-30
  • 打赏
  • 举报
回复
可能是因为 文件的编码方式和输出流的编码一致,而控制台的编码方式与输出流的编码不一致

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧