JAVA读取stream_java – 我们如何读取或使用outputstream的内容

我们如何阅读或使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值