针对 项目中间环节 使用到的输入流 复用(可以看做是复制拷贝)

Redis IO多路复用技术以及epoll实现原理 redis 是一个单线程却性能非常好的内存数据库, 主要用来作为缓存系统。 redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。为什么 Redis 中要使用 I/O 多路复用这种技术呢?首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O... 阅读详情

一般情况下一个输入流 stream,正常情况使用了一次,stream就已经没有用了,不能起到第二次利用。一般情况 都是采用先把stream转化为File 文件保存 然后反复利用,这种比较多见,之所以写这个,就是因为有些情况下不能转化为文件保存起来利用输入输出流复用,转化为byte[] 经常会发生格式不正确或其他问题,这种项目中间环节不可能让你在项目中生成一个临时文件,那么这种BufferedInputStream 就很好的保存了最原始的输入流,
在使用时候只需要标记使用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();
        }
}
iOS 使用OC实现文件拷贝 由于项目需要,需要将文件及内容拷贝一份,考虑到后期维护及复用,单独封装了一个函数. - (BOOL)copyFile:(NSString *)srcFilePath dstFilePath:(NSString *)dstFilePath { NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:dstFilePath]) { // 阅读详情

相关推荐

Altium Designer操作技巧(2)——如何实现模块化布局的复用(一)?

本文介绍了Altium Designer中模块化布局复用的操作技巧,通过创建Room关联器件、设置ChannelOffset、复制模块格式三个步骤,实现重复电路的高效布局布线。以双运放电路为例,详细演示了从源Room到目标Room的格式复制过程,包括参数设置和常见问题处理。该方法能显著提升复杂模块的设计效率,确保布局一致性和美观度。文章还提供了微信公众号获取更多内容的方式,并预告将分享层次化设计等其他复用方法。操作过程虽初看复杂,但熟练后仅需1-2分钟即可完成,适合处理多重复模块的PCB设计。

u012526819的博客 2074

FileInputStream和BufferdInputStream的区别

1.从结构上: FileInputStream是字节输入流InputStream抽象类的一个实现类。BufferdInputStream是缓冲输入流,它继承于FilterInputStream。 2.从读取方式上: FileInputStream每次会到磁盘上读取数据。BufferdInputStream通过read()读取输入流的数据时,BufferdInputStream会将该输入流的数据分批的填到缓冲区中,每当缓冲区中的数据被读完之后,输入流会再次填充数据缓冲区。 ...

qq_45475528的博客 849

STM32CubeIDE进阶技巧:高效复用工程文件的拷贝与重命名实战

本文详细介绍了在STM32CubeIDE中高效复用工程文件的拷贝与重命名实战技巧。通过正确的文件复制、关键文件重命名和深度清理残留文件等步骤,开发者可以快速复用已有工程配置,显著提升开发效率。文章还提供了模块化工程模板、版本控制集成和自动化脚本等高级技巧,帮助开发者避免常见问题并优化工作流程。

weixin_29184075的博客 197

java 流的复用

JAVA中,对于inputstream 经常要采取复用 就是在同一段程序中用两边inputstream 中的内容 而实际上使用一次inputstream 中的内容 ,inputstream 中的指针便会指到最后一次使用流的位置,导致第二次使用,就会没有数据可用 这里有两种方法 第一种就是重设指针 主要采用先mark 标记上一次指针在的位置,再用reset 方法回到 指针所在的地方 而in

doge_admin的博客 1195

Android逆向实战:抖音聊天记录数据库解析与导出(附完整SQL查询)

本文提供了一份Android逆向实战指南,详细解析了抖音聊天记录数据库的结构与导出方法。通过定位核心的`im.db`数据库文件,深度解读conversation_list、msg等关键表结构,并附上完整的SQL查询语句,帮助开发者或研究人员安全、合规地提取和分析本地聊天数据,适用于移动安全研究与数据分析场景。

mango的博客 863

深度伪造检测实战:轻量级频域特征 pipeline 部署指南

深度伪造检测(deepfake detection)是多媒体内容安全的核心技术,其本质是通过建模生成式篡改在像素与频域留下的微弱异常痕迹。传统端到端大模型虽在标准数据集上表现优异,却因训练域与真实场景失配、计算开销高、缺乏可解释性而难以落地。本文聚焦于工程可复现的实践路径,提出‘人脸定位→频域伪造特征提取(Xception-FCN + Frequency-Aware Masking)→轻量分类决策’三段式解耦架构,兼顾精度、延迟与可解释性。该方案已在边缘设备(Jetson Orin NX)实现单帧<48ms

weixin_33437929的博客 310

Java解决InputStream流重复使用问题【100%解决】

我在做上传文件的时候,第一步要读取文件中的数据进行分析校验,第二步,校验通过后需求将源文件上传OSS,然后使用同一个InputStream流,发现上传OSS的文件为0kb了。

主要从事JAVA开发,目前是优快云博客Java领域新星创作者、阿里云博客专家、担任公司研发经理、技术负责人等。热爱编程,喜欢在Python、C、C++领域探索。 2882

那些年对支付宝的研究[整理]

支付宝功能强大.他内部各个功能间的跳转是通过Uri 实现的.而使用window.location.href 即可.跟浏览器一样的协议.很方便 H5启动支付宝: alipays://platformapi/startapp?appId=20000067&url=网址 alipays://platformapi/startapp?appId=20000691&url=网址 ali...

技术专研 8919

JAVA输入流的复用

原文转自:http://book.51cto.com/art/201205/339224.htm 《深入理解Java 7:核心技术与最佳实践》第3章Java I/O,本章主要侧重于介绍Java I/O操作中的底层抽象和重要API的使用。本节为大家介绍输入流的复用。 AD: 3.1.3 输入流的复用 输入流的复用其实有些自我矛盾的应用场景。

chen88358323的专栏 6077

ESP32开发环境与微信小程序通信的完整示例

通过搭建稳定的esp32开发环境,实现其与微信小程序间的双向通信,涵盖Wi-Fi连接、数据收发与协议设计,为物联网应用提供低成本解决方案。

weixin_42126677的博客 1135

MDK开发篇:基于立创逻辑派FPGA-G1与Cortex-M1软核的按键控制LED实战

本文详细介绍了基于立创逻辑派FPGA-G1开发板与高云Cortex-M1软核的完整开发流程。通过Gowin云源软件配置软核系统与GPIO外设,并在Keil MDK环境中编写按键控制LED的C程序,最终实现程序固化与上电自启动。教程涵盖硬件配置、软件开发、在线调试与固化部署全步骤,帮助STM32开发者快速上手FPGA软核开发。

weixin_42103128的博客 149

Java中三种方法重复使用同一输入流

在工作遇到一种情况,需要对同一文件数据进行多次重复读取,我们流像一个管道一样,数据一旦流过去,就无法被再次使用。例如我需要对同一张电子发票,通过定位多次读取相关信息。在工作中还遇到问题:需要对读入的文件 (MultipartFile) 计算 MD5,同时又需要将其上传到 S3上,即需要对同一输入流进行多次重复读取操作,但是按照流本身所代表的抽象含义,数据一旦流过去,就无法被再次使用。......

争做优秀java技术博客! 3531

MFC属性网格控件(CMFCPropertyGridCtrl)完全指南:构建专业属性编辑界面

本文详细介绍了MFC中的CMFCPropertyGridCtrl控件的使用方法。主要内容包括:控件基础用法(初始化、添加属性、事件处理)、高级设置(自定义外观、创建属性类型、动态更新)、派生类实现(自定义绘制、搜索过滤功能)、界面集成技巧(对话框布局、属性编辑器)以及实际应用示例。文章重点讲解了如何通过继承和自定义实现复杂功能,并提供了性能优化、多语言支持等最佳实践方案。该控件适用于需要大量参数配置的应用程序,能够创建类似Visual Studio属性窗口的专业界面。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 155

文件拷贝使用io流将一个指定目录文件拷贝到另一个磁盘的位置上

文件拷贝使用io流将一个指定目录文件拷贝到另一个磁盘的位置上 涉及知识点:缓冲流、文件字符流、File类、获取当前系统时间毫秒值、异常处理 编写时间:2019/7/20 具体思路如下: 1、先从简单的入手,考虑一下如何复制文件?所以我们创建一个类之后,可以先编写一个拷贝文件的方法,有两个参数:分别为:被拷贝文件路径和终点位置。流的输入输出概念是针对程序而言的,所以我们要先从起点位置将内容复制到程序...

qq_44053632的博客 2339

Openclaw错误分析与解决方案之:All models are temporarily rate-limited. Please try again in a few minutes

Openclaw错误分析与解决方案之: All models are temporarily rate-limited. Please try again in a few minutes.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1624

面试官连夜整理:103道AI Agent面试题,答对一半直接加薪50%

维度AutoGPTLangGraphAutoGen控制流LLM 驱动的隐式循环代码层定义的显式状态图对话驱动的自动流转状态存储Prompt 上下文中(易丢失)结构化 State 对象(可持久化)对话历史(自动累积)分支能力依赖 LLM 的文本输出(不稳定)条件边 + 节点路由(确定性)多 Agent 对话自然分支(涌现式)回溯/回滚无原生支持,只能重新开始原生 Checkpoint 支持时间旅行无全局回滚,单 Agent 可重启人机协同仅人工在关键点介入(需要自定义)原生支持。

weixin_35774598的博客 625

【C++】六个默认成员函数——拷贝复制

【C++】六个默认成员函数——拷贝复制

weixin_71138261的博客 768

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Linux 下拷贝开源库文件到空仓库的实践

在软件开发过程中,开发者常常需要基于现有的开源项目进行二次开发、定制化或简单地复用其代码。然而,直接克隆整个仓库可能会带来不必要的历史记录和元数据,这在某些场景下并不理想。为了满足特定需求,开发者可能希望仅拷贝开源库的文件内容,而不包含其完整的 Git 历史和配置信息。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1320

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

软件复用

软件复用的好处有很多 一、提高工作效率 这条自不必说,比如在项目A中你写一个Ajax模块,A完工后启动了项目B,在B中就可以直接复用项目A的模块了。一个可复用的软件可以为将来节省费用,被服用的频率越高,组件的初始开发成本就越低。 二、提高软件质量 可复用的软件总比不能复用的有更多的质量保障。因为可复用的软件在不断的复用过程中把一些bug,缺陷都很快的排除了。因此可复用的软件一定是利于系统的可维护性的。 按抽象程度的高低,可以划分为如下的复用级别: 代码的剪贴复制 利用编辑器(IDE)可以.

roselast的博客 570

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

对象的浅拷贝和深拷贝

带你完全理解和掌握对象的浅拷贝和深拷贝

qq_61233877的博客 1631

彻底搞懂JavaScript深拷贝与浅拷贝:从原理到实战避坑

本文深入讲解JavaScript中的深浅拷贝机制。首先解析JS数据类型的存储差异:基本类型存储在栈内存,拷贝时直接复制值;引用类型在栈存引用地址,堆存实际值,默认浅拷贝会共享内存。接着详细介绍浅拷贝的实现方式(扩展运算符、Object.assign等)及适用场景,以及三种深拷贝方法:JSON.parse/stringify的简易方案、手动递归实现的进阶方案和lodash.cloneDeep的生产方案。文章最后给出选型建议:单层结构用浅拷贝,多层嵌套需深拷贝,特殊场景推荐使用成熟库。通过理解存储机制和实际案例

七叔的博客 1030

IO多路复用问题

https://www.jianshu.com/p/12c4081365df select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。 select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞...

z69183787的专栏 992

C#图像内存高速拷贝:使用Marshal.AllocHGlobal与ArrayPool实现内存拷贝的几个方法

内存拷贝这事,核心就四个字——减少拷贝。1. 能直接操作IntPtr就操作,不用转托管数组(自己写像素运算)2. 必须转数组就用ArrayPool,别new byte[](高频采集场景)3. 传给OpenCV/Halcon直接用Mat/HImage包装,零拷贝(第三方库支持)4. 真要拷贝就用Marshal.Copy + ArrayPool组合(低GC、高吞吐)把回调里的new byte[]换成ArrayPool,GC压力能降一个量级。

LongtengGensSupreme博客 370

10种JavaScript代码复用模式

作者 |汤姆大叔前言任何编程都提出代码复用,否则话每次开发一个新程序或者写一个新功能都要全新编写的话,那就歇菜了。但是代码复用也是有好要坏,今天这篇文章我们将针对代码复用来进行讨论,里...

web前端开发 1111

深拷贝和浅拷贝

(1)拷贝是为了部分或全部复用原对象的属性,在原对象的基础上创建一个新的对象。(2)浅拷贝是拷贝后两个对象地址不相等,但两个对象的部分属性地址相等,新对象并没有拷贝所有的属性,而是复用原对象中的值。(3)深拷贝是拷贝后两个对象不仅地址不相等,两个对象的所有属性地址都不相等。

superLeiZhenHuan的博客 151

【C++】二叉搜索树深拷贝的致命陷阱:如何用前序遍历解决90%程序员的内存崩溃难题

本文以 “Key 结构→KeyValue 结构” 为演进主线,完整实现了两种结构的非递归与递归操作(插入、查找、删除),并针对默认成员函数(拷贝构造、赋值运算符重载、析构)的深拷贝需求,设计了基于前序遍历的拷贝逻辑、“拷贝 - 交换” 的赋值技法及后序遍历的销毁逻辑,同时结合 “小区车库车牌验证”“单词拼写检查”“中英互译字典” 等实际场景,清晰区分两种结构的适用范围,为 BST 的工程化应用提供了可直接复用的代码模板与逻辑指导。

qq_2778465975的博客 1680
上一篇: Redis Info 命令
下一篇: PostMan使用模拟http请求 发送xml报文请求
Java_HuiLong
博客等级 码龄11年 26粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值