【发布时间】:2011-12-06 01:41:56
【问题描述】:
我想从流中读取文本和二进制文件,其中流可以是文件或 URL 连接。两个流具有相同的格式,其中有一个 ASCII 文本标头,后跟一个大的二进制数据块。我正在使用 DataInputStream 来执行此操作。对于文件,我正在使用
DataInputStream dis = new DataInputStream(new FileInputStream(new File("test")));
对于 URL,我正在使用(其中 uc 被初始化为指向一个 URL):
DataInputStream dis = new DataInputStream(new BufferedInputStream(uc.getInputStream()));
在设置 DataInputStream 之后,我会遵循:
dis.readLine()
dis.read(buf);
这可行,但我注意到 readLine 是 depecrated(即使有 posts 指的是使用它)。既然我的文本是 ASCII 就可以继续使用它吗?如果这不是一个好主意,并且我使用 JDK 建议使用 BufferedReader,有没有办法同时访问文本和二进制文件?我尝试使用 BufferedReader 来获取文本标题,但是在使用底层流时我得到了不正确的二进制数据,可能是因为其中一些已经被消耗了。
【问题讨论】:
-
ASCII 文本标题有多长?它们是固定长度的吗?您能否将标头读取为“二进制数据”并转换为一个或多个字符串?
-
标头是可变长度的,我需要寻找一个分隔符才能知道二进制数据从哪里开始。但正如你所说,我认为我可以将文本读取为二进制(使用 readByte)并构建一个字符串。谢谢。