博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA读取stream_java – 我们如何读取或使用outputstream的内容
阅读量:5323 次
发布时间:2019-06-14

本文共 1575 字,大约阅读时间需要 5 分钟。

我们如何阅读或使用outputstream的内容.

就我而言,我正在使用一种具有签名的方法.

public static OutputStream decryptAsStream(InputStream inputStream,

String encryptionKey)

此方法返回OutputStream.我想让OutputStream成为String.

是否可以将java.io.OutputStream的输出传递给Java中的String?

解决方法:

How can we read or use the contents of outputstream.

一般来说,你不能. OutputStream是您将字节写入的对象.通用API不提供任何获取字节的方法.

有一些特定类型的输出流可以让你返回字节.例如:

> ByteArrayOutputStream有一个获取字节数组内容的方法.

> PipeOutputStream具有您可以读取的相应PipeInputStream.

>如果使用FileOutputStream写入文件,通常可以打开FileInputStream来读取文件内容…前提是您知道文件路径名.

看看那种方法,让我觉得方法签名对于你想要做的事情是错误的.如果目的是为流提供加密器,则该方法应返回InputStream.如果目的是在某处写入加密数据,那么该方法应该返回void并获取一个额外的参数,该参数是该方法应该写入的OutputStream. (然后调用者可以使用OutputStream子类来捕获加密数据……如果这是所需的.)

“工作”的另一个替代方法是更改​​方法的签名以生成返回类型ByteArrayOutputStream(或文件名).但这不是一个好的解决方案,因为它会影响调用者决定加密输出应该发送到何处的能力.

UPDATE

关于你的解决方案

OutputStream os = AESHelper.decryptAsStream(sourceFile, encryptionKey);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

baos = (ByteArrayOutputStream) os;

byte[] imageBytes = baos.toByteArray();

response.setContentType("image/jpeg");

response.setContentLength(imageBytes.length);

OutputStream outs = response.getOutputStream();

outs.write(imageBytes);

这可能有效,但代码很差:

>如果AESHelper.decryptAsStream是您编写的方法(看起来好像是!),那么您应该将其声明为返回ByteArrayOutputStream.

>如果它已被声明为返回ByteArrayOutputStream,则应将其直接分配给baos.

>无论哪种方式,您都不应该将baos初始化为新创建的ByteArrayOutputStream实例,该实例会立即被丢弃.

值得注意的是Content-Type不正确.如果您将该响应发送到浏览器,它将尝试将加密数据解释为图像…并失败.从理论上讲,您可以设置Content-Encoding标头……但是没有一个可以工作.所以最好的解决方案是将Content-Type作为“application / octet-stream”发送.

标签:java,servlets

来源: https://codeday.me/bug/20191008/1870394.html

转载地址:http://tphhv.baihongyu.com/

你可能感兴趣的文章
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
freebsd 实现 tab 命令 补全 命令 提示
查看>>
struts1和struts2的区别
查看>>
函数之匿名函数
查看>>
shell习题第16题:查用户
查看>>
实验4 [bx]和loop的使用
查看>>
Redis常用命令
查看>>
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>
redis cluster 集群资料
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
微软职位内部推荐-SOFTWARE ENGINEER II
查看>>
centos系统python2.7更新到3.5
查看>>
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>
套接口和I/O通信
查看>>