黑马程序员技术交流社区

标题: 调用read(byte[] b)方法将文件中的所有内容打印出来 [打印本页]

作者: lixiuliang    时间: 2014-2-25 18:24
标题: 调用read(byte[] b)方法将文件中的所有内容打印出来
定义一个文件输入流,调用read(byte[] b)方法将exercise.txt文件中的所有内容打印出来(byte数组的大小限制为5)。
因为是byte[]参数,所以用字节流。但是byte[]数组的大小限制为5,所以最后那个字只能读一半了?怎么把那文件的内容显示在控制台上
作者: 我要的幸福呢    时间: 2014-2-25 18:33
跟数组大小无关吧,最后会把所有数据都读到的
作者: 我要的幸福呢    时间: 2014-2-25 18:35
如果只是觉得是这样不妨写代码试一下,如果是代码运行结果有问题,可以把代码贴出来看一下
作者: 自由自在2014    时间: 2014-2-25 18:49
不是循环读取吗?不是读一段就输到控制台上 应该先到内存吧?
作者: lixiuliang    时间: 2014-2-25 18:49
我要的幸福呢 发表于 2014-2-25 18:35
如果只是觉得是这样不妨写代码试一下,如果是代码运行结果有问题,可以把代码贴出来看一下 ...

题目说“byte数组的大小限制为5”怎么把五个byte转成字符输出到控制台上?
想到这里就写不动了。如果赋值给一个更大的数组又有什么意义?StringBuilder也无法添加byte数组
作者: 我要的幸福呢    时间: 2014-2-25 18:53
new String(byte[] bytes),转成字符串就可以打印输出了

作者: lixiuliang    时间: 2014-2-25 19:06
我要的幸福呢 发表于 2014-2-25 18:53
new String(byte[] bytes),转成字符串就可以打印输出了

我正式愁的这个,读过来是乱码,因为第3个字只读了一半吧
作者: lixiuliang    时间: 2014-2-25 19:11
自由自在2014 发表于 2014-2-25 18:49
不是循环读取吗?不是读一段就输到控制台上 应该先到内存吧?

这是一道入学测试题,如果先读入到内存中,为什么题目限制5个byte数组呢?
作者: lixiuliang    时间: 2014-2-25 19:14
  1. package com.itheima;

  2. import java.io.FileInputStream;

  3. public class Test8 {

  4.         public static void main(String[] args) throws Exception {

  5.                 FileInputStream in = new FileInputStream("C:\\exercise.txt");
  6.                 //文件里的内容: 中关村黑马程序员训练营heimacom.itheimahahaha xixixi
  7.                 byte[] temp = new byte[5];
  8.                 while(in.read(temp) != -1){
  9.                         System.out.print(new String(temp));//第三个字只能输出一半
  10.                 }
  11.                 //输出结果:中关?搴诼?程序?毖盗?营heimacom.itheimahahaha xixixiixix
  12.                
  13.                
  14.         }
  15. }
复制代码

作者: 我要的幸福呢    时间: 2014-2-25 20:24
lixiuliang 发表于 2014-2-25 19:06
我正式愁的这个,读过来是乱码,因为第3个字只读了一半吧

出现乱码确实是因为这样,因为默认编码是gbk,gbk编码用两个字节表示一个字符
作者: ixiangfeng    时间: 2014-2-25 20:25
lixiuliang 发表于 2014-2-25 18:49
题目说“byte数组的大小限制为5”怎么把五个byte转成字符输出到控制台上?
想到这里就写不动了。如果赋值 ...

单个字节的数组,而汉字是两个字节的 肯定会有乱码的 先读出来然后写到ByteArrayOutputStream里面,然后再把ByteArrayOutputStream里面的内容toString() 就解决了 可能这道题就是考查这个流对象的吧
作者: volvoxc    时间: 2014-2-25 20:33
可以这样,当读到5个字节时,先不打印,先把这五个字节存入一个集合或是大一点儿的大小是偶数的字节数组中。如果用集合,可以等读完之后再把数据取出来,如果是数组,则等自己定义的数组存满数据之后再再打印数据。
作者: 平凡成就非凡    时间: 2014-2-25 20:41
可不可以用转换流,指定UTF-8编码表呢
作者: lixiuliang    时间: 2014-2-26 12:15
ixiangfeng 发表于 2014-2-25 20:25
单个字节的数组,而汉字是两个字节的 肯定会有乱码的 先读出来然后写到ByteArrayOutputStream里面,然后 ...

或许考察的是这个意思吧,我用ByteArrayOutputStream成功实现了,谢谢!




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