传递输入流?

Passing input stream around?

我正在使用 javax.mail
阅读电子邮件附件 我希望能够将附件从一个 class 传递到另一个
我正在阅读附件 part.getInputStream();

和其他 classes 使用输入流作为输入
我正在辩论是否应该创建

AttachmentClass
    inputStream

AttachmentClass
    byte[]

我知道传递 InputStream 可能会导致泄漏并指向其他不属于您的对象,而字节数组将是实际对象。

第一个选项会很简单:

AttachmentClass.setAttachment( part.getInputStream())
NextClass.doSomething(AttachmentClass)
NextClass.doSomething(AttachmentClass)

第二个选项需要多次从 InputStream 转换为字节,反之亦然

AttachmentClass.setAttachment(convertToByte(part.getInputStream()))
NextClass.doSomething(ConvertToInputStream(AttachmentClass))
NextClass.doSomething(ConvertToInputStream(AttachmentClass))

传递 InputStream 的正确方法是什么?

第一个选项可以,只要记得关闭NextClass中的InputStream即可。当您将 InputStream 对象转换为 byte 数组时,第二个选项中的转换没有实际意义,只是在从第二个 class 调用它时将其转换回 InputStream。如果您可以在 NextClass 中以 byte 数组形式处理附件,那么第二个选项是值得的。