重复读取输入流_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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • solidworks常用快捷键命令大全_solidworks怎么设置快捷键

    solidworks常用快捷键命令大全_solidworks怎么设置快捷键为了更好的节约大家的设计时间,小编花了一番功夫为大家整理出了一份SolidWorks的快捷键大全,希望可以帮助到大家。

    2022年9月28日
    0
  • 北京上网首选DNS服务器地址,北京最快的DNS服务器地址,北京DNS大全

    北京上网首选DNS服务器地址,北京最快的DNS服务器地址,北京DNS大全为了提高北京上网用户打开网页的速度,北京上网用户要选择适合北京网络的DNS,很多时候北京上网用户在家或者在办公室上网,经常发现能够上网,但很多的网站和网址打不开,报解析错误,这种情况往往是属于您的DNS使用不当,有时选北京电信联通推荐的DNS也会出现这种情况,具体选那个,之前最好去ping一下,看哪个延迟小一般情况下还是要选择北京电信联通移动的DNS。下面给您推荐在北京常用的DNS。北

    2022年6月4日
    92
  • Petalinux2019.1详细安装[通俗易懂]

    Petalinux2019.1详细安装[通俗易懂]1、首先安装虚拟机,VMware2、安装UBUNTU,ubuntu-18.04.1-desktop-amd64.iso,版本必须是这个,和petalinux-v2019.1-final-installer.run版本对应。3、安装虚拟机完成后,在windos和linux之间建立共享文件夹,使之传输文件更简单。(1)首先取得管理员权限首先输入用户密码然后设置管理员密码123456su…

    2022年9月11日
    0
  • VS开发中遇到无法解析外部符号问题(LNK错误)

    VS开发中遇到无法解析外部符号问题(LNK错误)在VS开发中,很容易遇到外部符号无法解析的问题,而这些问题大部分都是引用库失败导致的,只需正确的加载到了库,这类问题就可以解决了但也存在非库的原因,比如编码问题关于VS编码格式以及VS修改行尾编码格式问题如图解决办法代码文件保存行尾不一致导致的,行尾改为Windows(CRLF)。修改后即可编译通过…

    2022年6月28日
    61
  • Git创建远程分支并提交代码到远程分支

    Git创建远程分支并提交代码到远程分支1、可以通过gitbranch-r命令查看远端库的分支情况如图所示,远程仓库只有一个master分支2、从已有的分支创建新的分支(如从master分支),创建一个dev分支但此时并没有在远程仓库上创建分支如图所示还是只有一个master分支3、建立本地到远端仓库的链接–这样代码才能提交上去使用命令行gitpush–set-…

    2022年6月30日
    20
  • Cloudsim_java源码大全

    Cloudsim_java源码大全CloudSim介绍和使用1.CloudSim简介:2.CloudSim提供了以下新的特点:(1)支持大型云计算的基础设施的建模与仿真;(2)一个自足的支持数据中心、服务代理人、调度和分配策略的平台。(3)CloudSim独特功能有:3.CloudSim源代码介绍几个核心类:4.CloudSim下载,CloudSim在IDEA中配置5.CloudSim环境配置6.CloudSim的扩展7.使用CloudSim仿真的一般步骤1.CloudSim简介:2009年4月8日,澳大利亚墨尔本

    2022年10月13日
    0

发表回复

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

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