我有一个文件,在开始时包含一些纯文本,最后是二进制内容.二进制内容的大小由我读过的一条纯文本行确定.
我使用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;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用RandomAccessFile。使用readLine()读一开始的纯文本(注意这个局限性,如API中所述),然后readByte()或readFully()读取后续二进制数据。
使用底层
FileInputStream读取返回空字节数组。
这是因为您将流包装在中BufferedReader,当填充缓冲区时,该流可能已消耗了流中的所有字节。
如果您确实有一个文件(而不是更难查找的文件,例如网络流),那么我建议如下:
如果您想避免重新打开文件,您可以只mark()在 FileInputStream 的开头调用,然后调用reset()andskip()到达正确的位置。(我一直在寻找一个InputStream.seek(),但我看不到 - 我不记得以前在 Java 中想要过它,但它真的没有吗?哎呀。)
| 归档时间: |
|
| 查看次数: |
10185 次 |
| 最近记录: |