micro_cloud_fly
2018-05-24 10:05
采纳率: 100%
浏览 1.0k
已采纳

java从同一个字节数组读取数据,两个输入流为什么会互相受影响

代码如下

public static void main(String[] args) {
        byte[] test = new byte[100];
        for (int i = 0; i < test.length; i++) {
            test[i] = (byte) i;
        }
        ByteArrayInputStream bins = new ByteArrayInputStream(test);
        DataInputStream dins = new DataInputStream(bins);
        try {
            System.out.println("第一次读取前dins有效长度:" + dins.available());
            System.out.println("第一次读取一个字节:" + dins.readByte());
            System.out.println("第一次读取又读取一个字节:" + dins.readByte());
            System.out.println("第一次读取后dins有效长度:" + dins.available());
            dins.close();
            bins.close();
            System.out.println("第一次读取后原字节数组的长度:" + test.length);
            ByteArrayInputStream bins1 = new ByteArrayInputStream(test);
            DataInputStream dins1 = new DataInputStream(bins);
            System.out.println("第二次读取前dins1有效长度:" + dins1.available());
            System.out.println("第二次读取一个字节:" + dins1.readByte());
            System.out.println("第一次读取又读取一个字节:" + dins1.readByte());
            System.out.println("第一次读取后dins有效长度:" + dins1.available());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}


输出内容如下
第一次读取前dins有效长度:100
第一次读取一个字节:0
第一次读取又读取一个字节:1
第一次读取后dins有效长度:98
第一次读取后原字节数组的长度:100
第二次读取前dins1有效长度:98
第二次读取一个字节:2
第一次读取又读取一个字节:3
第一次读取后dins有效长度:96

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • Mr丶YangZCH 2018-05-24 10:21
    已采纳

    **我告诉你为什么

    ByteArrayInputStream bins1 = new ByteArrayInputStream(test);
    DataInputStream dins1 = new DataInputStream(**bins**);
    自己看看写的什么
    应该是
    ByteArrayInputStream bins1 = new ByteArrayInputStream(test);
    DataInputStream dins1 = new DataInputStream(bins1);**

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • qq_42241997 2018-05-24 11:12

    一般情况下是:先打开的后关闭,后打开的先关闭 另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,在关闭流b
    看你想用来干什么了,是读取文件还是写入文件,读取就用FileInputStream,写入就用FileOutputStream,我给你找了个链接,说得非常详细,也有实例,你好好看一下,看不明白的地方再问我:smartcat86/article/details/4085739"target="_blank">4085739

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题