我面临的情况是我必须将300 MB的数据写入XML。使用Streams我完全执行了任务,没有遇到OutOfMemory
异常。
现在我必须将FileOutputStream
对象转换为实际数据,并将其作为String
传递给其他方法。
我试过了,但我没有得到预期的结果。请告诉我如何将FileOutputStream
对象转换为字符串值?
答案 0 :(得分:3)
如果您的字符串太大并且您一次尝试将其保留在内存中,则始终会导致 OutOfMemoryError 独立您使用哪个读者的事实。
所以,问题不在于你的读者。问题是你的String对象(你要传递的那个)。
如果您需要存储/传递如此庞大的文件作为String变量,那么您的架构肯定存在问题。
您的错误在于您尝试将XML文本放在Java String变量中。你应该避免在内存中存储大对象,这是关键点。
通常,文本是压缩比例为0.1 - 0.01的压缩对象。
尝试使用ZipOutputStream / ZipInputStream(或一些类似的库) - 它们可以正常读取/写入文件的流。
在我的实践中,它与巨大的XML文件完美配合。
答案 1 :(得分:0)
你是如何写文件的? FileOutputStream创建没问题,但是当你使用FileOutputStream编写时,你必须传递一些东西。当您将数据传递给FileOutputStream.write(some_data)
时,为什么不在同一时间在StringBuffer
中写相同的内容?
答案 2 :(得分:0)
您无法从FileOutputStream
读取。尝试FileReader
从文件中读取数据。
难道您无法使用最初用于创建文件的数据吗?如果不是,您可以使用{PARER} SAX
或JDOM
来读取数据