[英]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.