2

一部のクライアント/サーバーコードでのソースを追跡しようとしていますが、使用されるクラスの多くには、具体的には ではなく、EOFExceptionをスローすると言うメソッドしかありません。通常はスタック トレースを確認するだけですが、スタック トレースがなく、再現できません。したがって、具体的にスローするメソッドを持つすべてのクラスのリストがあると便利ですが、この情報を見つける方法がわかりません。IOExceptionEOFExceptionEOFException

をスローするメソッドを持つすべての (標準) Java クラス (私の場合は SE 7) に関する情報源はありEOFExceptionますか? Javadocs を読んでみましたが、役に立ちEOFExceptionませんでした。

(少なくとも、それDataInputは言及していることを発見しましEOFExceptionた。しかし、他にはありますか?)

あとがき:ソースコードを調べないとわからないので、抽出したソースコード(1.7.0_45)から「 」で検索した結果がこちら。EOFException

4

2 に答える 2

3

編集: 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

拡張する標準のjava.*Exception クラスがないことに注意してくださいEOFException(例外の発生はありません)。

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

java.*ソースコードの任意の場所)。

これは限定的ではありますが、重要な出発点です。他の人が述べたように、これが見逃される状況があるかもしれません.作業するソースコードしかない場合、それらを見つけるのに時間がかかります. うまくいけば、この情報があなたを正しい道に導いてくれるでしょう。


JDK で提供されるすべてのソースコードについて、Java 7.51 の結果を次に示します。

extends\s+([a-z]+\.)*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
于 2014-01-30T14:02:45.557 に答える
1

コードが EOFException を作成し、すぐにスローするという仮定の下でのみ、これを見つけることができます。ただし、次の場合も EOFException がスローされる可能性があります。

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

または、aliteralminds メソッドを無効にするには、次のようにします。

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

冗談はさておき、多くのクラスのメソッドは、単に継承が原因で EOFException をスローする場合があります。「EOFException」のgrepは、非常に基本的なクラスのみを提供します。ただし、そのすべてのサブクラスを考慮する必要があります。例:java.util.jar.JarInputStream

于 2014-01-30T14:10:24.520 に答える