簡體   English   中英

如何知道BufferedReader是否與DataInputStream鏈接?

[英]How can I know if a BufferedReader is chained with a DataInputStream?

在一個方法中,我需要一個包裝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編程。

有人可以幫幫我嗎? 提前致謝。

DataInputStream永遠不能是BufferedReader的實例 - 它們都在不同的類層次結構中。

BufferedReader包裝另一個Reader,而不是Stream。

您可以使用InputStreamReader從Streams橋接到Readers。

從同一個Reader中讀取雙精度數和行數並沒有多大意義 - 一個是原始二進制數據,另一個是字符數據。 也許你需要閱讀雙打的文本編碼,並使用Double.parseDouble(text)解析它。

答:不可能通過向接受bufferedReader參數的方法添加標志來完成您要完成的任務。

B.目前還不清楚你是如何將DataInputStream傳遞給BufferedReader的(可能是通過InputStreamReader對嗎?)但是無論如何你一起使用BufferedReader和DataInputStream似乎是錯誤的。 BufferedReader將像普通的InputStream一樣使用你的DataInputStream,所以我不知道你為什么要把DataInputStream放在它周圍

DataInputStream類不是BufferedReader類的子類型

class DataInputStream extends FilterInputStream implements DataInput {}

class BufferedReader extends Reader {}

更多信息:

BufferedReader不是DataInputStream的子類,因此您的錯誤是合乎邏輯的......

BufferedReaders用於文本數據,DataInputStream用於二進制數據。 除非你喜歡混淆別人,否則你永遠不會用另一個包裹一個。

您可以使用DataInputStream來包裝BufferedInputStream(以其他方式包裝它沒有任何意義)

您可以圍繞InputStreamReader包裝BufferedReader,但沒有簡單的方法來確定已完成此操作。

你可以寫

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

但您必須使用反射庫來確定BufferedReader包裝的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM