簡體   English   中英

在哪里可以找到所有Java(SE 7)標准庫類的列表,這些類具有的方法將引發EOFException?

[英]Where can I find the list of all Java (SE 7) standard library classes which have methods which will throw an EOFException?

我正在嘗試在某些客戶端/服務器代碼中跟蹤EOFException的來源,但是許多使用的類僅具有表示它們拋出IOException ,而不是專門拋出EOFException 通常,我只會查看堆棧跟蹤,但是我沒有並且無法復制它。 因此,列出每個類的列表將有幫助,這些類具有專門拋出EOFException方法,但是我不知道如何查找此信息。

是否有每個(標准)Java類(在我的情況下為SE 7)中包含引發EOFException方法的信息源? 我嘗試閱讀關於EOFException的Javadocs EOFException

(至少,我發現DataInput確實提到了EOFException 。但是還有更多嗎?)

后記:由於查找的唯一方法似乎是檢查源代碼,因此是我在提取的源代碼(1.7.0_45)中搜索“ EOFException ”的結果。

編輯: 在底部為JDK中的所有源代碼添加了7.51的結果。

在Java 6.17中,這里是所有顯式拋出java.io.EOFException類。 具體來說,它是在每個源代碼文件中找到new\\s+EOFException的次數。

java.io.DataInputStream.java: 8
java.io.ObjectInputStream.java: 6
java.io.RandomAccessFile.java: 8
java.util.zip.GZIPInputStream.java: 2
java.util.zip.InflaterInputStream.java: 1
java.util.zip.ZipFile.java: 1
java.util.zip.ZipInputStream.java: 1

這是另外一點信息:包含catch\\s*\\(\\s*EOFException所有源代碼文件:

java.io.ObjectInputStream.java: 1
java.util.zip.ZipInputStream.java: 1

請注意,沒有擴展EOFException標准java.*異常類(不存在

extends\s+([a-z]+\.)*EOFException

java.*源代碼中的任何位置)。

這是一個有限但有價值的起點 正如其他人所提到的,在某些情況下這可能會遺漏-當您擁有的只是可以工作的源代碼時,找到它們將非常耗時。 希望這些信息將使您走上正確的道路。


以下是JDK隨附的所有源代碼的Java 7.51的結果:

extends\\s+([az]+\\.)*EOFException

沒有

catch\\s*\\(\\s*EOFException

com.sun.imageio.plugins.gif.GIFImageReader: 1
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl: 1
com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl: 4
com.sun.org.apache.xerces.internal.impl.XMLVersionDetector: 1
com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDLoader: 2
java.io.ObjectInputStream: 1
java.util.zip.ZipInputStream: 1

new\\s+EOFException

com.sun.corba.se.impl.io.IIOPInputStream: 1
com.sun.imageio.plugins.png.PNGImageReader: 1
com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl: 1
com.sun.org.apache.xerces.internal.impl.XMLEntityManager: 1
com.sun.org.apache.xerces.internal.impl.XMLEntityScanner: 1
java.io.DataInputStream: 8
java.io.ObjectInputStream: 6
java.io.RandomAccessFile: 8
java.util.zip.GZIPInputStream: 2
java.util.zip.InflaterInputStream: 1
java.util.zip.ZipFile: 1
java.util.zip.ZipInputStream: 1
javax.imageio.stream.ImageInputStreamImpl: 8

您只能在代碼創建並立即引發EOFException的假設下才能發現這一點。 但是,該事件也可能引發EOFException:

class Foo {
    ...
    public void iAmHarmless(Exception x) { if (x != null) throw x; }
    ...
 }

或者,如何打敗alteralminds方法:

 class XYException extends EOFException { ... }
 class Foo {
     public void surprise() { throw new XYException().super(); }
 }

開個玩笑-許多類的方法可能僅由於繼承而引發EOFException。 “ EOFException”的grep僅給出基本類。 但是您必須考慮其所有子類。 示例: java.util.jar.JarInputStream

暫無
暫無

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

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