黑马程序员技术交流社区

标题: IO流问题 [打印本页]

作者: 黑马-王言龙    时间: 2012-6-22 21:42
标题: IO流问题
本帖最后由 wyl530274554 于 2012-6-22 22:26 编辑
  1. import java.io.*;
  2. public class SystemIn {        
  3.         public static void main(String[] args) throws IOException {
  4.                 InputStream is = System.in;
  5.                 FileOutputStream fos = new FileOutputStream("G:\\Hello.txt");
  6.                 int c = 0;
  7.                 while((c=is.read()) != -1) {
  8.                         fos.write((char)c);
  9.                 }
  10.                 is.close();
  11.                 fos.close();
  12.         }
  13. }
复制代码
上面代码中is.read()方法返回的是下一个数据字节。
如果我在MS-DOS下输入"你好!",则会在G:\\Hello.txt内写入"你好!"
这里读一个字节写一个字节,而java中的字符是两个字节表示,为什么能在文件里显示正常的?
作者: 邓杰    时间: 2012-6-22 21:56
这这是记事本的功能实现的;
这分为好几个过程;你在写入“你好”这两个字符的时候;JVM的读取流就会把它按照默认的编码形式把它拆成字节;以二进制的形式进行读取;
你的输出流也会把这些数据以字节的形式写入硬盘存放;
而记事本在打开硬盘中的数据之前会把他加载到内存中;按照默认的编码形式将其还原成字符,所以就没有问题;
当然这些功能的实现都是在没有指定编码形式的的前提下实现的;具体的这方面的内容会毕老师在后面的编码表视频中有详细的讲解;到时就会明白了;
作者: 黄连兵    时间: 2012-6-22 21:57
通过FileOutputStream写入到文件中的在底层其实都是二进制代码,你用记事本打开,记事本程序就将这些二进制代码进行了一次解码显示在其界面上,使用的是默认的编码和解码方式,当然不会出错了~!
作者: 张华廷    时间: 2012-6-22 23:43
FileOutputStream都是以二进制写入到文件中的,JVM的读取流就会把它按照默认的编码形式把它拆成字节;以二进制的形式进行读取,然后把二进制转换成字节,写入文件中。
作者: 黄晓蚁    时间: 2016-6-19 13:58
这些基础都可以在视屏中学到对么




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2