• IO流系列一:输入输出流的转换


    输入流转字节数组的原理
    1、读取输入流,每一小段 读一次,取出 byteArray 。
    2、将该一小段byteArray写入到字节输出流ByteOutStream。直到不能从输入流再读出字节为止。
    3、将字节输出流转成字节数组。

    源码:

    public class ByteToInputStream {  
      
        public static final InputStream byte2Input(byte[] buf) {  
            return new ByteArrayInputStream(buf);  
        }  
      
        public static final byte[] input2byte(InputStream inStream)  
                throws IOException {  
            ByteArrayOutputStream swapStream = new ByteArrayOutputStream();  
            byte[] buff = new byte[100];  
            int rc = 0;  
            while ((rc = inStream.read(buff, 0, 100)) > 0) {  
                swapStream.write(buff, 0, rc);  
            }  
            byte[] in2b = swapStream.toByteArray();  
            return in2b;  
        }  
      
    }

    疑问1:为什么输入流,需要一小段一小段地读,而不是整段读取?
    分析:如果需要整段读取,则需要取输入流的available(),但是该方法不能正确地返回输入流的总长度。

    疑问2:为什么输入流的available()不能返回总长度?
    分析:查看available方法的源码。返回值 描述是下面这个玩意,
    * @return     an estimate of the number of bytes that can be read (or skipped
    * over) from this input stream without blocking or {@code 0} when
    * it reaches the end of the input stream.
    大意就是 这个值是个估算的值,在读取流的过程中,没有发生阻塞时能够读取到的长度。
    所以可以理解为在网络中读取时,可能会发生阻塞的情况。而在本地读取时,则能保证流的不阻塞传输。
    建议不使用该办法获取流的字节数组总长度。
  • 相关阅读:
    asp.net mvc ActionResult
    理解RESTful架构
    Entity Framework Code First Migrations--EF 的数据迁移
    java多态的理解
    webuploader上传文件,图片
    java文档注释--javadoc的用法
    微信小程序初窥-环境搭建
    学神:我天天玩没怎么学。但是你怎么成了学神?
    c#中的弱引用:WeakReference
    Cron表达式简单的介绍
  • 原文地址:https://www.cnblogs.com/chenjfblog/p/8915679.html
Copyright © 2020-2023  润新知