Java 传递输入流?

Java 传递输入流?,java,inputstream,Java,Inputstream,我正在阅读javax.mail的电子邮件附件 我希望能够将附件从一个类传递到另一个类 我正在阅读附件 part.getInputStream 其他类使用输入流作为输入 我在辩论应该创造什么 AttachmentClass inputStream 或 我知道传递InputStream可能会导致泄漏并指向其他对象,而不是您的对象,而字节数组将是实际的对象 第一个选项非常简单: AttachmentClass.setAttachment( part.getInputStream()) Nex

我正在阅读javax.mail的电子邮件附件 我希望能够将附件从一个类传递到另一个类 我正在阅读附件 part.getInputStream

其他类使用输入流作为输入 我在辩论应该创造什么

AttachmentClass
    inputStream

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

第一个选项非常简单:

AttachmentClass.setAttachment( part.getInputStream())
NextClass.doSomething(AttachmentClass)
NextClass.doSomething(AttachmentClass)
第二个选项需要多次从InputStream转换为byte,反之亦然

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

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

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

您测试过这两个选项吗?如果你尝试读取输入流两次会发生什么?使用输入流,但是考虑使附件类不可变。创建AttachmentClass实例的对象(具有未包装的InputStream实例)负责关闭流。
AttachmentClass.setAttachment(convertToByte(part.getInputStream()))
NextClass.doSomething(ConvertToInputStream(AttachmentClass))
NextClass.doSomething(ConvertToInputStream(AttachmentClass))