如何知道BufferedReader是否与DataInputStream链接?

时间:2012-07-05 20:01:45

标签: java file java-7

在一个方法中,我需要一个包装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中使用相同的变量:

  • 来自BufferedReader的方法readLine()
  • 来自DataInputStream的方法readDouble()

所以我需要一个链接两个类的流。

我正在使用Java 7 JDK进行编程。

有人可以帮帮我吗?提前谢谢。

5 个答案:

答案 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包装的内容。