使用InputStream遇到的傻事

本文通过两个测试案例详细分析了Java中FileInputStream的使用,包括读取文件内容和判断文件结束的方法。在test-1中,正确地读取并打印了文件所有字节。然而在test-2中,由于误在循环内多次调用read()方法,导致只打印了部分字节。结论强调了理解read()方法工作原理的重要性。
摘要由CSDN通过智能技术生成
public class TestFileInputStream {
    public static void main(String[] args) throws IOException {
        //test-1
        System.out.println("===============test-1==============");
        //正常读取,要多次用到当前值,需要赋值给一个 对象,每调用一次read(),流就会读取一个字节
        FileOutputStream outputStream = new FileOutputStream(new File("D:/test/io/FileInputStream/1"));
        byte[] bytes={1,2,3,4,5,6,7,8,9,10};
        outputStream.write(bytes);
        outputStream.flush();

        StringBuilder stringBuilder = new StringBuilder();
        FileInputStream inputStream = new FileInputStream(new File("D:/test/io/FileInputStream/1"));
        int len = inputStream.available();
        for (int i = 0; i < len; i++) {
            StringBuilder str = stringBuilder.append(inputStream.read() + ",");
        }
        System.out.println(stringBuilder.toString());
        //..test-1

        //test-2
        System.out.println("===========test-2==================");
        StringBuilder builder = new StringBuilder();
        int read=0;
        FileInputStream inStream = new FileInputStream(new File("D:/test/io/FileInputStream/1"));
        while (true){
            read=inStream.read();
            builder.append(read+",");
            if (inStream.read()!=-1)    // 想用read()=-1 来判断文件是否读取完,应该每个循环只调用一次read()方法,想多次用当前读取到的值
                                        //应该赋值给对象 而不是 在循环中再调用一次 read()方法,调用一次读取一个字节,所以得到的字节少了
                continue;
            break;
        }
        System.out.println(builder.toString());
    }
}

结果:

===============test-1==============
1,2,3,4,5,6,7,8,9,10,
===========test-2==================
1,3,5,7,9,-1,

结论:
我是真滴蠢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值