关于网友提出的“java inputStream 转换成byte[]内存溢出”问题疑问,本网通过在网上对“java inputStream 转换成byte[]内存溢出”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:java inputStream 转换成byte[]内存溢出
描述:小弟最近有这样一个需求,需要从网上下载一些东西并存入数据库(不写入文件,条件不够),而且都比较大,300M+,下载的过程没问题,但将下载下来的inputstream转换为array时,我使用ByteArrayOutputStream,结果一直outOfMemory。我蛋疼啊,但我要是直接使用preparedStatement.setBinaryStream(1,inputStream)时,就报
java.io.IOException: Premature EOF
求救!!求扩散!!@红薯 @滔哥 @虫虫
解决方案1:下文件的时候,别把东西都压在内存里,读多少,就往本地文件里写多少。不要使用转array的方式。
解决方案2:数据库 写的时候可能写不下 这么大的, 转 blob 看看, blob内部也是byte[] 数组, jdk 缓存 加大试试
解决方案3:要么继续加大虚拟机内存,最少到1g起步,或者用文件缓冲。
解决方案4: 你用的ByteArrayOutputStream我刚才看了一下API,应该和ObjectOutputStream问题是一样的.这些对用的Inputsream应该也有这个问题.
建议看一下我的http://my.oschina.net/zhzhenqin/blog/123724
这些流都提供一个reset方法. 定期的调用reset就不会了.
为什么自己研究.
解决方案5:300M写数据库,就算内存够你数据库吃得消吗?你的方案感觉有问题
解决方案6:滔哥不会JAVA,友情帮顶.
以上介绍了“java inputStream 转换成byte[]内存溢出”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1221831.html