在Java中从一个流读取文本和二进制文件

在Java中从一个流读取文本和二进制文件,java,string,file,http,Java,String,File,Http,我想从流中读取文本和二进制文件,其中流可以是文件或URL连接。两个流都有相同的格式,其中有一个ASCII文本头,后跟一个大的二进制数据块。我正在使用DataInputStream来完成这项工作。对于文件,我使用 DataInputStream dis = new DataInputStream(new FileInputStream(new File("test"))); 对于URL,我使用(uc初始化为指向URL): 在设置DataInputStream之后,我将遵循以下步骤: dis.re

我想从流中读取文本和二进制文件,其中流可以是文件或URL连接。两个流都有相同的格式,其中有一个ASCII文本头,后跟一个大的二进制数据块。我正在使用DataInputStream来完成这项工作。对于文件,我使用

DataInputStream dis = new DataInputStream(new FileInputStream(new File("test")));
对于URL,我使用(uc初始化为指向URL):

在设置DataInputStream之后,我将遵循以下步骤:

dis.readLine()
dis.read(buf);

这是可行的,但我注意到readLine是(即使有人提到使用它)。因为我的文本是ASCII码,所以可以继续使用它吗?如果这不是一个好主意,并且我支持JDK使用BufferedReader的建议,那么有没有一种方法可以同时访问文本和二进制文件?我尝试BufferedReader获取文本头,但在使用底层流时,我得到了不正确的二进制数据,可能是因为其中一些数据已经被使用。

不推荐使用它的原因是无法正确地将字节转换为字符。由于此示例仅限于ASCII,因此使用它没有问题。

它被弃用的原因是未能正确地将字节转换为字符。由于此示例仅限于ASCII,因此使用它没有问题。

ASCII文本标题有多长?它们是固定长度的吗?你能把标题读成“二进制数据”并转换成一个或多个字符串吗?标题是可变长度的,我需要寻找一个分隔符来知道二进制数据从哪里开始。但正如您所说,我认为我可以将文本读取为二进制(使用readByte)并构建一个字符串。谢谢。ASCII文本标题有多长?它们是固定长度的吗?你能把标题读成“二进制数据”并转换成一个或多个字符串吗?标题是可变长度的,我需要寻找一个分隔符来知道二进制数据从哪里开始。但正如您所说,我认为我可以将文本读取为二进制(使用readByte)并构建一个字符串。谢谢
dis.readLine()
dis.read(buf);