我在Java Web应用程序中创建了一个Pdf,并将其作为电子邮件附件发送。
Pdf创建为byte[]
数组。将它包装在ByteArrayInputStream
中还是将其保留为byte[]
是否更好?
包装它可能更好的内存释放(读取this线程中接受的答案),但缺点是InputStream
(如果我是对的)创建数组的副本(阅读here)。
哪种方法可以避免内存耗尽?
答案 0 :(得分:3)
不,ByteArrayInputStream
包装数组,它不会复制它。来自the documentation(构建者采用byte[]
):
创建一个ByteArrayInputStream,以便它使用buf作为其缓冲区数组。不复制缓冲区数组。 pos的初始值为0,count的初始值为buf的长度。
有可能无论使用输入流都会复制它,但ByteArrayInputStream
本身不会复制它。
我不相信你真的担心一个特别重要的问题 - 我认为它根本不会产生内存泄漏,只是使用字节数组。