重复读取输入流_redis同时读写

重复读取输入流_redis同时读写inputstream只能读取一次,再次读取则无法获取到内容。这是因为inputStream的内部有个pos指针,当读取的时候指针会不断的移动,当移动到末尾的时候,就无法再次读取了。问题解决:方法一:使用ByteArrayOutputStream将字节缓存,每次读取都从ByteArrayOutputStream里面获取。获取ByteArrayOutputStream…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

inputstream只能读取一次,再次读取则无法获取到内容。这是因为inputStream的内部有个pos指针,当读取的时候指针会不断的移动,当移动到末尾的时候,就无法再次读取了。

问题解决:

 方法一:

    使用ByteArrayOutputStream将字节缓存,每次读取都从ByteArrayOutputStream里面获取。

   获取ByteArrayOutputStream:

public static ByteArrayOutputStream readInputStream(InputStream inputStream) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) > -1) {
            outputStream.write(buffer, 0, len);
        }
        outputStream.flush();
        return outputStream;
    }

 我们将inputStream中的数据读取到outputStream之中,然后需要使用Inputstream的时候字节将outputstream中的数据取出

InputStream inputStream1 = new ByteArrayInputStream(outputStream.toByteArray());
InputStream inputStream2 = new ByteArrayInputStream(outputStream.toByteArray());

缺点是如果读取的Inputstream内容很大,使用时会造成很大的内存消耗。

 方法二:

  使用inputStream中操作指针的方法markreset,两个方法分别为标记和重置,在使用inputstream之前我们使用mark标记一下指针的位置,读取完成后使用reset重置指针的位置。

        String text = "测试inputStream内容";
        InputStream rawInputStream = new ByteArrayInputStream(text.getBytes());
        byte[] readArray = new byte[1024];
        rawInputStream.mark(0);
        System.out.println(DigestUtils.md5Hex(rawInputStream));
        rawInputStream.reset();
        int readCount2 = rawInputStream.read(readArray);
        System.out.println("读取了" + readCount2 + "个字节");

这样就可以重复使用inputStream的内容了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191089.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 几种常见mybatis分页实现[通俗易懂]

    几种常见mybatis分页实现[通俗易懂]mybatis框架分页实现,有几种方式,最简单的就是利用原生的sql关键字limit来实现,还有一种就是利用interceptor来拼接sql,实现和limit一样的功能,再一个就是利用PageHelper来实现。这里讲解这三种常见的实现方式:无论哪种实现方式,我们返回的结果,不能再使用List了,需要一个自定义对象Pager。packagecom.xxx.mybatis.bean;…

    2022年10月20日
    3
  • pycharm的背景颜色设置_css中设置背景颜色

    pycharm的背景颜色设置_css中设置背景颜色1.打开PyCharm–>File–>Setting.2.更改为你想要的背景颜色

    2022年8月29日
    3
  • 3W原则[通俗易懂]

    3W原则[通俗易懂]目的:为了减少走线之间的电磁串扰。两个走线中心间距至少得大于3倍的线宽。用规则进行约束,但是规则用的两线之间的距离是边缘距离。因此规则设置的值应为10.8。(即线宽的两倍10.8=5.4X2)…

    2022年6月17日
    28
  • Windows 下 MariaDB10.2.17 (zip 格式) 的安装教程

    Windows 下 MariaDB10.2.17 (zip 格式) 的安装教程下载地址:https://downloads.mariadb.org/然后根据系统选择x86(32位)或x64(64位)版本的zip格式的安装包安装步骤1、解压安装包至磁盘D:\ProgramFiles\mariadb-10.2.17-winx642、根据内存大小选择ini配置文件,一般选择my-medium.ini即可,打开配置文件,在相应的属性节点下添加字符集…

    2022年5月9日
    190
  • win32API中文参考手册[通俗易懂]

    win32API中文参考手册[通俗易懂]中文在线手册:http://www.yfvb.com/help/win32sdk/下面也是中文手册chm版,排版不是很好蓝奏云下载:https://wws.lanzous.com/iw8E3fhlz5icsdn下载:https://download.csdn.net/download/weixin_43833642/12434848[会自动长积分]如果是初学,上面的api勉强够用,建议参考着原版英文一起学习!最后如果帮到你可以点个赞!感谢!…

    2022年10月11日
    2
  • py2exe用法_pynput库

    py2exe用法_pynput库一、简要py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,目的就是在没有安装python的windows系统上运行这个可执行程序。py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序。py2exe是发布在开源许可证下的。

    2022年9月11日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号