`
喜马拉雅上的小草
  • 浏览: 50886 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

读取未知大小字节流的方法

 
阅读更多

有一个InputStream,你需要把它的内容全部读到内存里,用一个byte[]存 储。怎么做?开一个大小为s的byte数组,然后读取一直到空间用完,然后开一个大小是2s的数组,把旧数组内容复制进来然后继续读。如果反复一直到数组 足够大。这应该是能想到最简单的解决方法。不过JDK提供了一个更fancy的工具来帮助我们完成这件事:ByteArrayOutputStream 。顾名思义,就是把字节流写到一个byte数组中。下面的例子展示了如何实际操作:



我猜ByteArrayOutputStream内部实现也用的是我上面说的方法,因为javadoc中有一句话“The buffer automatically grows as data is written to it.”。但是JDK提供的方法一般来说会比你自己写效率高一些,另外,有现成的方法为什么不拿来直接用呢?我就比较悲剧了,好多地方都是用自己写的方法 来读取的,比如读取图片上传啊,抓取URL这些。想改估计都改不过来了,整个一大悲剧。

分享到:
评论

相关推荐

    bytetinkerer:用Golang方式玩字节

    - 虽然具体细节未知,但可以推测这个项目可能包括读取、操作和分析字节流的示例代码,可能涉及文件、网络、编码解码等多个方面。 以上就是Go语言处理字节流的一些关键知识点,对于"bytetinkerer"项目,你可以期待...

    远程控制端的实现

    - **将屏幕图像转换为字节流**:为了便于在网络上传输,需要将捕获到的图像数据转换成字节流格式。这里可以使用`java.io.ByteArrayOutputStream`类进行转换,并采用JPEG等压缩格式以减少数据量。 - **发送字节流数据...

    ASP是用流输出文件下载 源码

    这里每次读取1024 * 64字节的数据量,然后通过`BinaryWrite`方法发送给客户端。通过`Flush`确保数据被立即发送出去,避免了缓冲区积累过多数据导致的问题。 #### 总结 通过以上分析可以看出,这段ASP代码实现了一...

    Asp.NET文件下载,可以防止盗链。

    2. 文件流:服务器端读取文件并将其作为字节流发送到客户端。这可以通过使用`System.IO.FileStream`类实现,读取文件内容到内存流,然后通过`HttpResponse.BinaryWrite()`方法将流发送到客户端。 3. 处理大文件:...

    java初级知识

    数组是用于存储固定大小的同类型元素的容器。 **8. 一维数组的声明与初始化** 声明一维数组: ```java int[] array; ``` 初始化一维数组: ```java int[] array = new int[5]; ``` **9. 数组的使用** - **长度**:...

    JAVA知识点列表 JAVA知识点列表

    - `InputStream`和`OutputStream`及其子类分别用于读取和写入字节流。 - `Reader`和`Writer`及其子类分别用于读取和写入字符流。 #### 9. 类库 - **类集框架中常见类的使用方法(ArrayList, LinkedList, Queue, ...

    学生数据管理(C语言)

    读取文件时,要进行反序列化,将字节流还原为结构体。这通常通过遍历结构体成员并逐个写入/读取来完成。 6. 文件定位: 使用`fseek()`函数可以在文件中移动读写位置,这对于更新特定学生的信息非常有用。`ftell()`...

    goosetypes-源码.rar

    这些解码器实现了从字节流到图像数据的转换,使得Go程序能够处理二进制图像数据。 总的来说,`goosetypes`库是Go语言中处理文件类型识别的重要工具。通过阅读和理解其源码,开发者可以更深入地了解文件类型的检测...

    商业编程-源码-《如何将一个文件分割成多个小文件》配套源代码.zip

    - **动态分割**:如果原始文件大小未知,可以先读取整个文件,然后根据文件大小动态决定每个小文件的大小,确保每个小文件接近但不大于预设大小。 - **按行或块分割**:适用于文本文件,按照行数或特定标记进行...

    java基础知识笔记总结

    - 数组是一种存储固定大小同类型元素的数据结构。 8. **一维数组的声明与初始化** - 一维数组的声明形式为:`类型[] 数组名` 或 `类型 数组名[]`。 - 初始化时需要指定数组长度,如:`int[] arr = new int[10];`...

    matlab开发-filesize

    在处理网络数据流时,如果文件大小未知,`filesize`可用于动态监测文件的增长,以便在达到预设阈值时执行某些操作,如下载暂停或继续。 至于`license.txt`文件,这通常包含软件许可信息,对于MATLAB开发来说,理解...

    黑马程序员入学Java知识

    - 用于存储固定大小的同类型元素的集合。 8. **一维数组的声明与初始化** - **声明**:`数据类型[] 数组名;` - **初始化**:`数组名 = new 数据类型[长度];` 9. **数组的使用** - 访问数组元素:`数组名[索引]...

    java精华总结

    数组是一种用于存储固定大小的同类型元素的数据结构。数组中的每个元素可以通过索引访问。 ##### 8. 一维数组的声明与初始化 ```java int[] array = new int[5]; // 声明并初始化长度为5的一维整型数组 ``` #####...

    学生信息管理系统(C语言版)

    通过这些函数,我们可以将结构体序列化为字节流并写入文件,或者从文件中读取字节流并反序列化回结构体。 用户交互是系统的重要组成部分。在C语言中,可以使用标准输入输出函数scanf和printf实现。用户可以通过键盘...

    http chunk

    此外,代码中还提到了`NettyChunkInputStream`类,虽然代码片段不完整,但根据命名推测,这个类可能是用来处理从`chunkQueue`中读取的HTTP Chunk数据的输入流,即它是专门设计来处理Chunked编码的输入流。...

    protobuf-java-2.5.0.rar

    - **解析消息**:反序列化字节流回消息对象,以便读取数据。 - **动态消息**:protobuf支持动态消息,允许在运行时解析未知的protobuf消息,增强了灵活性。 - **选项和扩展**:protobuf支持消息类型的选项和扩展...

    protobuf-net

    1. **数据序列化**:protobuf-net提供了一种将对象转换为字节流和从字节流反序列化回对象的方法。这对于网络通信和持久化存储非常有用,因为它能够显著减小数据占用的存储空间。 2. **代码生成**:protobuf-net支持...

Global site tag (gtag.js) - Google Analytics