A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王言龙 中级黑马   /  2012-6-22 21:42  /  1868 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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中的字符是两个字节表示,为什么能在文件里显示正常的?

4 个回复

倒序浏览
这这是记事本的功能实现的;
这分为好几个过程;你在写入“你好”这两个字符的时候;JVM的读取流就会把它按照默认的编码形式把它拆成字节;以二进制的形式进行读取;
你的输出流也会把这些数据以字节的形式写入硬盘存放;
而记事本在打开硬盘中的数据之前会把他加载到内存中;按照默认的编码形式将其还原成字符,所以就没有问题;
当然这些功能的实现都是在没有指定编码形式的的前提下实现的;具体的这方面的内容会毕老师在后面的编码表视频中有详细的讲解;到时就会明白了;

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
黄奕豪 + 1 赞一个!
黑马-王言龙 + 2 赞一个!

查看全部评分

回复 使用道具 举报 1 0
通过FileOutputStream写入到文件中的在底层其实都是二进制代码,你用记事本打开,记事本程序就将这些二进制代码进行了一次解码显示在其界面上,使用的是默认的编码和解码方式,当然不会出错了~!
回复 使用道具 举报
FileOutputStream都是以二进制写入到文件中的,JVM的读取流就会把它按照默认的编码形式把它拆成字节;以二进制的形式进行读取,然后把二进制转换成字节,写入文件中。
回复 使用道具 举报
这些基础都可以在视屏中学到对么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马