当前位置:  开发笔记 > 编程语言 > 正文

从同一个FileInputStream中读取字符串和二进制文件

如何解决《从同一个FileInputStream中读取字符串和二进制文件》经验,为你挑选了1个好方法。

我有一个文件,在开始时包含一些纯文本,最后是二进制内容.二进制内容的大小由我读过的一条纯文本行确定.

我使用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,当填充缓冲区时,该流可能已消耗了流中的所有字节。



1> Zach Scriven..:

您可以使用RandomAccessFile。使用readLine()读一开始的纯文本(注意这个局限性,如API中所述),然后readByte()readFully()读取后续二进制数据。

使用底层FileInputStream 读取返回空字节数组。

这是因为您将流包装在中BufferedReader,当填充缓冲区时,该流可能已消耗了流中的所有字节。

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有