在一个方法中,我需要一个包装DataInputStream作为参数的BufferedReader。我想将此方法声明为:
public void firstPass(BufferedReader inStream){ // some code ... }
但我不知道如何检查inStream是否正在包装DataInputStream。
我试过
public static void firstPass(BufferedReader inStream){
if (inStream instanceof DataInputStream){
}
}
但代码无法编译(Eclispe不接受代码:“不兼容的条件操作数类型BufferedReader和DataInputStream”)。
为什么需要这个?因为我想在inStream中使用相同的变量:
所以我需要一个链接两个类的流。
我正在使用Java 7 JDK进行编程。
有人可以帮帮我吗?提前谢谢。答案 0 :(得分:2)
DataInputStream永远不能是BufferedReader的实例 - 它们都在不同的类层次结构中。
BufferedReader包装另一个Reader,而不是Stream。
您可以使用InputStreamReader从Streams桥接到读者。
从同一个Reader读取双精度数和行并没有多大意义 - 一个是原始二进制数据,另一个是字符数据。也许您需要阅读双打的文本编码,并使用Double.parseDouble(text)
解析它。
答案 1 :(得分:1)
一个。你可能无法完成你想要完成的任务,可能会在接受bufferedReader参数的方法中添加一个标志
B中。目前尚不清楚如何将DataInputStream传递给BufferedReader(可能通过InputStreamReader对吗?)但是无论如何你一起使用BufferedReader和DataInputStream似乎是错误的。 BufferedReader将像普通的InputStream一样使用你的DataInputStream,所以我不知道为什么你会把DataInputStream放在它周围
答案 2 :(得分:1)
DataInputStream 类不是类 BufferedReader
的子类型class DataInputStream extends FilterInputStream implements DataInput {}
class BufferedReader extends Reader {}
更多信息:
答案 3 :(得分:0)
BufferedReader
不是DataInputStream
的子类,因此您的错误是合乎逻辑的......
答案 4 :(得分:0)
BufferedReaders用于文本数据,DataInputStream用于二进制数据。除非你喜欢让人困惑,否则你永远不会把一个包裹在另一个中。
您可以使用DataInputStream来包装BufferedInputStream(以其他方式包装它没有任何意义)
你可以在一个InputStreamReader周围包装一个BufferedReader,但没有简单的方法来确定这已经完成。
你可以写
BufferedReader br = new BufferedReader(new FileReader(name));
但您必须使用反射库来确定BufferedReader包装的内容。