Java-是能够阅读一个文件线路线、停止和然后立即开始阅读字节里我停止?
-
20-09-2019 - |
题
我有一个问题,试图分析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