我有一个文件,在开始时包含一些纯文本,最后是二进制内容.二进制内容的大小由我读过的一条纯文本行确定.
我使用a BufferedReader
来读取各行,但它没有公开任何方法来引用读取字节数组.所述readUTF
用于DataInputStream
犯规读一路到行的结束,并且readLine
方法被弃用.
使用底层FileInputStream
读取返回空字节数组.关于如何解决这个问题的任何建议?
private DOTDataInfo parseFile(InputStream stream) throws IOException{ DOTDataInfo info = new DOTDataInfo(); BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); int binSize = 0; String line; while((line = reader.readLine()) != null){ if(line.length() == 0) break; DOTProperty prop = parseProperty(line); info.getProperties().add(prop); if(prop.getName().equals("ContentSize")) binSize = Integer.parseInt(prop.getValue()); } byte[] content = new byte[binSize]; stream.read(content); //Its all empty now. If I use a DataInputStream instead, its got the values from the file return info; }
Zach Scriven.. 5
您可以使用RandomAccessFile
。使用readLine()
读一开始的纯文本(注意这个局限性,如API中所述),然后readByte()
或readFully()
读取后续二进制数据。
使用底层
FileInputStream
读取返回空字节数组。
这是因为您将流包装在中BufferedReader
,当填充缓冲区时,该流可能已消耗了流中的所有字节。
您可以使用RandomAccessFile
。使用readLine()
读一开始的纯文本(注意这个局限性,如API中所述),然后readByte()
或readFully()
读取后续二进制数据。
使用底层
FileInputStream
读取返回空字节数组。
这是因为您将流包装在中BufferedReader
,当填充缓冲区时,该流可能已消耗了流中的所有字节。