重复读取输入流_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中操作指针的方法mark和reset,两个方法分别为标记和重置,在使用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jenkins拉取gitlab代码_jenkins配置git自动部署

    jenkins拉取gitlab代码_jenkins配置git自动部署前言python自动化的脚本开发完成后需提交到git代码仓库,接下来就是用Jenkins拉取代码去构建自动化代码了新建项目打开Jenkins新建一个自由风格的项目源码管理Repository

    2022年7月28日
  • Java Stringbuilder简单介绍

    Java Stringbuilder简单介绍程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过”+”符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生,下面就Stringbuilder的使用做个简要的总结:一、创建Stringbuilder对象StringBuilderstrB=newStringBuilder();1、append(Stringstr)/append(Charc):字符串连接Syst

    2022年6月28日
  • SQL SERVER插件之SQLPrompt 激活使用

    SQL SERVER插件之SQLPrompt 激活使用如有不懂,可以关注麒琳技术栈,欢迎在线咨询

    2022年7月26日
  • 手机分辨率分类「建议收藏」

    手机分辨率分类「建议收藏」1、VGA(640×480)分辨率,(VideoGraphicsArray)是IBM在1987年随PS/2机一起推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用。主要基于VGA显示卡的计算机、笔记本等设备,而在一些既要求显示彩色高分辨率图像又没有必要使用计算机的设备上,VGA技术的应用却很少见到。2、QVGA即”Quarter

    2022年8月13日
  • Java常用的输入输出语句「建议收藏」

    Java常用的输入输出语句「建议收藏」对于经常上机刷题的来说,首先得解决输入输出方法,Java的输入输出流在Java学习过程的后面部分才会接触,但是我们可以掌握一些简单的,常用的输入输出方法首先输出大家最熟悉的莫过于输出方法,直接用System.out.println()或者System.out.print()了下面一个实例1234567publicclassMain{    publicstaticvoidmain(Str…

    2022年5月26日
  • mui框架从0到1【webapp开发教程】

    mui框架从0到1【webapp开发教程】随着需求的不断更新,与对技术的不断探索,计划在20天之内与团队协作开发一款移动端的app

    2022年6月15日

发表回复

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

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