1

在一种方法中,我需要一个将 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 进行编程。

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

4

5 回答 5

2

DataInputStream 永远不能是 BufferedReader 的实例——它们都在不同的类层次结构中。

BufferedReader 包装了另一个 Reader,而不是 Stream。

您可以使用InputStreamReader从 Streams 桥接到 Readers 。

从同一个 Reader 读取双精度和行并没有什么意义——一个是原始二进制数据,另一个是字符数据。也许您需要阅读双打的文本编码,并使用Double.parseDouble(text).

于 2012-07-05T20:06:12.020 回答
1

A. 不可能通过向您的方法添加一个接受 bufferedReader 参数的标志来完成您想要完成的事情

B. 目前尚不清楚您如何将 DataInputStream 传递给 BufferedReader(可能是通过 InputStreamReader 对吗?)但无论如何,将 BufferedReader 和 DataInputStream 一起使用似乎是错误的。BufferedReader 将像普通 InputStream 一样使用您的 DataInputStream,所以我不知道您为什么要将 DataInputStream 放在它周围

于 2012-07-05T20:06:37.523 回答
1

DataInputStream类不是BufferedReader类的子类型

class DataInputStream extends FilterInputStream implements DataInput {}

class BufferedReader extends Reader {}

更多信息:

于 2012-07-05T20:14:01.813 回答
0

BufferedReader不是的子类,DataInputStream所以你的错误是合乎逻辑的......

于 2012-07-05T20:09:21.037 回答
0

BufferedReaders 用于文本数据,DataInputStream 用于二进制数据。除非你喜欢混淆别人,否则你永远不会把一个与另一个包装起来。

您可以使用 DataInputStream 来包装 BufferedInputStream (以其他方式包装它没有任何意义)

您可以将 BufferedReader 包裹在 InputStreamReader 周围,但没有简单的方法可以确定这已完成。

你可以写

BufferedReader br = new BufferedReader(new FileReader(name));

但是您必须使用反射库来确定 BufferedReader 包装的内容。

于 2012-07-05T20:09:28.690 回答