Java-是能够阅读一个文件线路线、停止和然后立即开始阅读字节里我停止?

StackOverflow https://stackoverflow.com/questions/1341396

我有一个问题,试图分析ascii文件的一部分,并且一旦我打端的标签,立即开始读字节从这一点。我知道的一切Java读断线或一个整体字创建一个缓冲区,废墟任何机会获得该字后立即我的站点。是唯一的方式做到这一阅读逐字节,找到新线路,重建的一切现有的新线,看看它是否是我的结束标记,并从那里走?

有帮助吗?

解决方案

到底有多大这个文件?我首先想到的是阅读整个事情变成字节缓冲区或一个ByteArrayOutputStream没有试图对其进行处理,然后通过比较字节值定位标签。一旦知道其中文本部分结束和二进制部分开始,则处理每个部分作为合适的。

其他提示

这是可能的,但据我所知没有类API。

你可以做手-打开它作为一个 BufferedInputStream, 支持 mark/reset.你读逐块(byte[])和你分析它作为ASCII。最终你累积在一个缓冲器,直到你打标记。但在你之前 read 你打电话 mark.如果你相信你读过你所有你需要在ASCII,你打电话 reset 然后你打电话 read 要转储的其余部分ASCII的一部分。现在你有一个 BufferedInputStream (这是一个 InputStream)准备用于阅读的二进制的一部分文件。

我认为最好的办法是将抛弃的“线”的概念。为了找到结束标记,创建一个环形缓冲区这只是大到足以容纳结束标记,读入它逐字节,和之后的每个字节的校验,如果它包含该标签。

有更先进和高效的搜索算法,但不同的是只用较长的搜索字词(大概是你的结束标记短)。

相关

是啊,你说得对的逐字节。抽象有它的缺点。

是对文件生长,或者是它的静态?

如果它是静态的,请参见的http:// java.sun.com/javase/6/docs/api/java/nio/MappedByteBuffer.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top