黑马程序员技术交流社区

标题: InputStream出现问号怎么处理? [打印本页]

作者: jagon    时间: 2014-3-15 18:13
标题: InputStream出现问号怎么处理?
package pack1;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class TestDemo2 {
    public static void main(String[] args) throws Exception {
        File file = new File("F:" + File.separator + "test"
                + File.separator + "demo.txt"); // 定义文件路径
        if (file.exists()) { // 文件存在则可以读取
            InputStream input = new FileInputStream(file);   //实例化读入流
            byte data[] = new byte[1024]; // 假设要读的长度是1024
            int foot = 0; // 操作data数组的脚标
            int temp = 0;
            do {
                temp = input.read(); // 读取了一个字节
                    data[foot++] = (byte) temp; // 保存读取进来的单个字节
            } while (temp != -1);// 没有读取完,还有内容
            input.close();
            System.out.println("读取的数据是:【" + new String(data, 0, foot) + "】");
        }
    }
}

截图02.jpg (55.56 KB, 下载次数: 72)

截图02.jpg

作者: chen_x    时间: 2014-3-15 20:13
这里用do...while循环不合适     
       do {
                temp = input.read(); // 读取了一个字节
                    data[foot++] = (byte) temp; // 保存读取进来的单个字节
            } while (temp != -1);
do...while循环是先执行循环体再判断终止条件。
在这个程序里,当读到文件最后一个字符时,do{}语句中取到temp='g',将其写入到data[]数组中,然后判断temp是否为-1,而此时temp='g',所以终止条件不成立,do{}语句再次执行,这时因为已经到达文件结尾处,所以temp=-1,而且程序将这个-1值写到data数组中的,而字符集编码无法识别-1,所以就输出了个问号?

应该使用while(){}语句,如下修改后就没有?了:
import java.io.FileInputStream;
import java.io.InputStream;
public class TestDemo2 {
    public static void main(String[] args) throws Exception {
        File file = new File("F:" + File.separator + "test"
                + File.separator + "demo.txt"); // 定义文件路径
        if (file.exists()) { // 文件存在则可以读取
            InputStream input = new FileInputStream(file);   //实例化读入流
            byte data[] = new byte[1024]; // 假设要读的长度是1024
            int foot = 0; // 操作data数组的脚标
            int temp = 0;
            while((temp=input.read())!=-1){
                data[foot++] = (byte) temp; // 保存读取进来的单个字节
            }
            input.close();
            System.out.println("读取的数据是:【" + new String(data, 0, foot) + "】");
        }
    }
}




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