我面临的情况是,我必须将300 MB的数据写入XML。使用流我没有面临OutOfMemory
异常,完美地执行了任务。如何从FileOutputStream对象检索字符串值?
现在我必须将FileOutputStream
对象转换为实际数据并将其作为String
传递给其他方法。
我试过了,我没有得到预期的结果。请让我知道如何将FileOutputStream
对象转换为字符串值?
我面临的情况是,我必须将300 MB的数据写入XML。使用流我没有面临OutOfMemory
异常,完美地执行了任务。如何从FileOutputStream对象检索字符串值?
现在我必须将FileOutputStream
对象转换为实际数据并将其作为String
传递给其他方法。
我试过了,我没有得到预期的结果。请让我知道如何将FileOutputStream
对象转换为字符串值?
如果您字符串太大,你试图在同一时间,以保持它在内存中,它会总是因为你的OutOfMemoryError独立于您使用的读者的事实。
所以,问题不在于你的读者。问题是你的String对象(你想传递的对象)。
如果你需要将一个巨大的文件存储/传递给String变量,那么你的架构肯定有问题。
你的错误是你正试图把你的XML文本放入Java String变量中。你应该避免在内存中存储大对象,这是关键点。
通常文本是一个压缩的对象,压缩比为0.1 - 0.01。
尝试使用ZipOutputStream/ZipInputStream(或一些类似的库) - 它们在读取/写入文件的流中正常工作。
在我的实践中,它可以很好地处理大型XML文件。
感谢您的回复。正如你所提到的,我们需要改变架构。没有其他选择。 +1清楚地解释它。 –
你是如何在文件中写的? FileOutputStream的创建是可以的,但是当你使用FileOutputStream编写时,你必须传递一些东西给它。当您将数据传递给FileOutputStream.write(some_data)
时,为什么不同时在StringBuffer
中写同样的数据?
StringBuffer内部使用append方法。在编写大量数据时,它会给你OutOfMemory异常。 –
您是否试图一次追加整个数据?你如何在outputStream中写入,全部以一个字节或一个字节为单位?如果你正在逐字节写入,在同一个循环中,如果你对StringBuffer进行了追加,它是否会抛出异常?你也可以检查:[链接](http://stackoverflow.com/questions/2431040/java-outofmemoryerror-with-stringbuilder) –
您无法从FileOutputStream
读取。尝试使用FileReader
来读取文件中的数据。
你不能使用你最初用来创建文件的数据吗?如果没有,你可以使用XML解析器像SAX
或JDOM
读取数据
现在我有FileOutputStream对象,我必须将其转换为字符串。我们如何做到这一点? –
我很困惑你想做什么。你写了一个文件吗?你期望通过将FileOutputStream对象转换为字符串?你为什么需要这样做? – Skepi
实际上,我正在做这个逻辑的方法应该返回一个字符串值,这将在其他一些方法中使用。我试过fileOutputStream.toString(),它正在返回对象。但是我需要返回一个字符串值。 –
因此,您需要使用刚写入的数据将数据传递给另一个对象,或者是其他地方的数据? – Skepi
我必须读取此FileOutputStream对象并将该字符串值传递给其他进程的另一个方法。 –
所以你想要:从文件中读取行,并将此行传递给另一个方法参数,true? – Sajmon