针对 项目中间环节 使用到的输入流 复用(可以看做是复制拷贝)
2016-12-20 16:40
239 查看
一般情况下一个输入流 stream,正常情况使用了一次,stream就已经没有用了,不能起到第二次利用。一般情况 都是采用先把stream转化为File 文件保存 然后反复利用,这种比较多见,之所以写这个,就是因为有些情况下不能转化为文件保存起来利用输入输出流复用,转化为byte[] 经常会发生格式不正确或其他问题,这种项目中间环节不可能让你在项目中生成一个临时文件,那么这种BufferedInputStream 就很好的保存了最原始的输入流,
在使用时候只需要标记使用markUsed(),通过该方法会自动重置流,也就是说你下次getInputStream()的时候又是一个新的一模一样的流。
例如:
StreamReuse 源码:
在使用时候只需要标记使用markUsed(),通过该方法会自动重置流,也就是说你下次getInputStream()的时候又是一个新的一模一样的流。
例如:
public String uploadFile(String bizCode, InputStream stream){ StreamReuse reuse = new StreamReuse(stream); // 1.第一次使用了stream,正常情况,stream就已经没有用了,不能起到第二次利用。 public xxxxxxxxxxxxxxxxxx(stream); // 2.标记流已经使用了 reuse.markUsed(); // 3.第二次使用,直接get一下就可以获取一个新的 public xxxxxxxxxxxxxxx(reuse.getInputStream()); }
StreamReuse 源码:
import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; /** * Desc: 输入流的备份 * Author: zhanghl2 * Date: 2016/12/20 * Time: 10:52 * Version: */ public class StreamReuse { private InputStream input; public StreamReuse(InputStream input) { if (!input.markSupported()) { this.input = new BufferedInputStream(input); } else { this.input = input; } } public InputStream getInputStream() { input.mark(Integer.MAX_VALUE); return input; } public void markUsed() throws IOException { input.reset(); } }
相关文章推荐
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
- 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
- 在项目中使用SmartUpload组件可以进行文件的上传和下载操作
- Maven 的 Web 项目使用 war 插件针对不同环境打包
- 扩大UIButton点击范围,直接复制黏贴就可以使用
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- Laravel - 使用Git Clone将项目复制到新开发环境
- 漫谈项目管理之:项目的成功必须是可以“复制”的
- 使用 sudo nautilus 进入ubuntu 文件管理器。可以随意复制,删除,粘贴,无权限限制
- [Xcode使用 - 3] 复制Xcode5.1.1中的项目模板到Xcode6.1
- gitHub上边android studio开发的开源项目转为Eclipse中的项目,个人调试过的可以使用
- GIT 初学使用(一) - 针对项目的respository创建
- 第十八周项目三(2):使用枚举类型设计函数,可以按指定的方式输出一个平面点的对称点
- 实现Repeater分页功能,该方法可以直接复制到自己的项目
- Xcode 项目中我们可以使用 ARC 和非 ARC 的混合模式。
- 可以在项目中使用的一些框架
- linux scp命令参数及用法详解--linux远程复制拷贝命令使用实例
- System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。 其函数原型是: public static void arraycopy(Object src, int
- linux scp命令参数及用法详解--linux远程复制拷贝命令使用实例
- 使用coding.net来托管源码(可以免费存放私有项目的哦)(转载)