package com.laien.io; import java.io.IOException; import java.io.InputStream; /** * 自定义InputStream,节点流 * * @author Administrator * */ public class MyByteArrayInputStream extends InputStream { protected byte[] arr; // 数据源 protected int ptr = 0; // 当前指针 protected int mark=0;//标记 /** * 构造函数,接收输入的字节数组 * @param arr */ public MyByteArrayInputStream(byte[] arr) { this.arr = arr; } /** * 抽象方法,必须实现 */ @Override public int read() throws IOException { //当读到没有数据后,会返回-1 return (ptr < arr.length) ? arr[ptr++] : -1; } /** * 可读数据长度 */ @Override public int available() throws IOException { return arr.length - ptr; } @Override public void close() throws IOException { ptr = arr.length; } /** * 标记,与reset相应 */ @Override public synchronized void mark(int readlimit) { this.mark = readlimit; } @Override public synchronized void reset() throws IOException { if (this.mark<0 || this.mark >= arr.length) { throw new IOException("标识不对"); } ptr = mark;//指针重新指到mark位置,让流可以重新读取 } /** * 重写方法 */ @Override public int read(byte[] b, int off, int len) throws IOException { if (ptr >= arr.length || len <0) { //流已读完 return -1; } if (len == 0) { return 0; } //处理最后一次读取的时候可能不没有len的长度,取实际长度 len = available() < len ? available() : len; System.arraycopy(arr, ptr, b, off, len); ptr += len; //返回读取的长度 return len; } public static void main(String[] args) throws IOException { //测试 byte[] source = new byte[10]; for (int i=0; i<source.length; i++) { source[i] = (byte)i; } MyByteArrayInputStream mis = new MyByteArrayInputStream(source); byte[] buff = new byte[4]; // int len =0; while(-1 != (len = mis.read(buff, 0, buff.length))) { for (int i=0; i<len; i++) { System.out.print(buff[i]); } System.out.println(); } } }
相关推荐
在自定义的`ServletInputStream`中实现`isReady()`、`setReadListener(ReadListener)`等相关方法以保持兼容性。 最后,为了在Spring Boot中使用这个自定义的`HttpServletRequestWrapper`,我们需要在适当的拦截器或...
Java IO 包含了许多类,如InputStream、OutputStream、Reader、Writer等,它们分别用于处理字节流和字符流。字节流适用于二进制数据,而字符流适用于文本数据。Java IO 还包括Filter流,可以用来装饰其他流,添加...
"工具" 标签可能意味着博客作者讨论了如何利用 `InputStream` 类进行数据处理,或者介绍了与之相关的实用工具类和技巧,例如使用 `InputStream` 进行文件上传、网络数据接收等。 根据提供的文件名 `InputStream....
自定义消息协议是在标准TCP/IP协议之上,根据具体需求设计的一种数据传输格式。本篇将详细讲解如何在Java中实现基于Socket的自定义消息协议,以及客户端与服务器端的数据转换与解析过程。 首先,我们来看`Socket...
- **IO异常处理**:提供了一些自定义的IOException子类,使得异常处理更加精确。 - **线程安全的缓冲流**:如BufferedInputStream和BufferedOutputStream,提高了IO操作性能。 - **文件观察**:可以监听文件系统事件...
1. **字节流**:处理原始的字节数据,包括`InputStream`和`OutputStream`作为抽象基类,以及它们的子类如`FileInputStream`和`FileOutputStream`。字节流适用于处理任何类型的二进制数据,如图片、音频文件等。 2. ...
Apache Commons IO是很多Maven插件的依赖之一,因为插件在处理源代码、资源文件和构建输出时,需要进行各种I/O操作。 在Maven项目中,添加Apache Commons IO作为依赖,可以通过以下方式在pom.xml文件中声明: ```...
Java的IO库包含了多种类和接口,如InputStream、OutputStream、Reader、Writer等,它们构成了处理输入和输出的核心框架。这些类用于读写文件、网络流、系统属性等,而JPicus就是用来监测这些操作的效率和性能的。 ...
总结起来,这个场景涉及到Java IO流的使用,Servlet的文件传输,Spring框架的HTTP请求处理,以及一些辅助库和自定义工具类。理解这些核心概念和技术,对于实现“通过IO流把文件传到前端并下载”的功能至关重要。
2. **流操作**:IO组件的核心在于对流的处理,如`InputStream`和`OutputStream`。`StreamUtils`和`IOUtils`提供了一些便捷的方法,如`copy()`方法可以方便地在不同类型的流之间进行数据复制。 3. **缓冲区操作**:`...
节点流直接与数据源或目的地关联,如FileInputStream,而处理流则构建在其他流之上,提供额外的功能,如BufferedReader。 2. **字节流**:涵盖InputStream和OutputStream家族,如FileInputStream和FileOutputStream...
import java.io.InputStream; import java.util.Scanner; public class Month { private static int month; public static void main(String[] args) { System.out.println("请输入月份:"); Scanner input = ...
在上传和下载文件时,通常涉及到网络IO,Java提供了Socket和ServerSocket类处理客户端和服务器之间的连接,而InputStream和OutputStream则负责数据传输。此外,HTTP协议的文件上传下载可以使用HttpURLConnection或者...
这个版本提供了大量静态工厂方法来创建InputStream、OutputStream、Reader、Writer等流对象,以及用于处理文件、目录、字符串缓冲、系统属性、线程局部存储和网络连接的工具类。 1. **文件操作**:Commons IO 提供...
5. **文件存储策略**:可以自定义存储策略,例如将文件直接保存到服务器的指定目录,或者通过流式处理将文件内容传递给其他处理程序。 **Commons-IO组件** Apache Commons-IO则是另一个非常重要的工具库,它提供了...
例如,`IOUtils.toString()`可以从InputStream中读取内容并转换为字符串,而`IOUtils.copy()`可以将一个流的内容复制到另一个流。 3. **字符集转换**:在处理文本文件时,字符集转换经常需要。Apache Commons IO...
- `Externalizable`: 允许对象自定义序列化和反序列化行为。 - `FileFilter`: 用于过滤文件。 - `FilenameFilter`: 用于过滤文件名。 - `ObjectInputValidation`: 用于验证反序列化的对象。 2. **类** - `...
`IOUtils.toString()`方法可以从InputStream或Reader中读取内容并返回一个字符串。 3. 文件过滤器:允许通过实现或使用预定义的过滤器(如`FileNameFilter`和`DirectoryFilter`)来选择性地处理文件或目录。这在...