ObjectInputStream
またはObjectOutputStream
が空であるかどうかを確認する方法があるかどうかは疑問です。私のプログラムでは、意味します。最初にそれが実行されるときにObjectInputStream
はreadObject()
メソッドを使用しますが、それでもファイルが空の場合はEOF
例外(ファイルの終わり)が返されるため、空であるかどうかを確認して例外を取り除きたいと思います。readObjectのEOF例外
私はそれを正しくやっていますか?シリアライズのために、クライアントとサーバーの両方で以下のような名前と属性のクラスを作成しました。
public class KeyAdr implements Serializable{
String adr;
String key;
}
....
static FileInputStream fIn=null;
static ObjectInputStream oIn=null;
private static KeyAdr test=new KeyAdr();
....
fIn= new FileInputStream("d:\\someFile.ser");
oIn = new ObjectInputStream(fIn);
test= (KeyAdr) oIn.readObject();
EDIT:
static File serAdrKey=new File("d:\\someFile.ser");
static ObjectOutputStream oOut;
static FileOutputStream fOut;
static final Pattern WebUrlPattern = Pattern.compile (WebUrlRegex);
private static String WebUrlStr;
static KeyAdr letsDoIt= new KeyAdr();
....
public static void openStreams() throws IOException
{
fOut= new FileOutputStream(serAdrKey);
oOut = new ObjectOutputStream(fOut);
}
@Override
public void beforeWindowOpen(NavigationEvent event)
{
temp=event.getURL().toString();
Matcher WebUrlMatcher = WebUrlPattern.matcher (temp);
if (WebUrlMatcher.matches())
{
int n = WebUrlMatcher.groupCount();
for (int i = 0; i <= n; ++i) {
WebUrlStr = WebUrlMatcher.group (i);
}
letsDoIt.adr=WebUrlStr;
try {
oOut.writeObject(letsDoIt);
} catch (IOException ex) {
Logger.getLogger(Cobratest2.class.getName()).log(Level.SEVERE, null, ex);
}
try {
oOut.flush();
} catch (IOException ex) {
Logger.getLogger(Cobratest2.class.getName()).log(Level.SEVERE, null, ex);
}
編集2
fIn= new FileInputStream("d:\\someFile.ser");
PushbackInputStream input = new PushbackInputStream(fIn);
int c = input.read();
if(c != -1)
{
input.unread(c);
oIn = new ObjectInputStream(input);
test = (KeyAdr) oIn.readObject();
// ......
}
編集3:
EDIT2コードがスタックトレースと例外次のように私を与えた:
Exception in thread "main" java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2552)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at test.Test.processClient(Test.java:117)
at test.Test.run(Test.java:92)
at test.Test.main(Test.java:159)
ここで、ObjectOuputStreamを初期化しましたか? – Phani
@Phani私はそれを質問に追加しました。私はここにそれを書くことを忘れました – lonesome
私の第2編集の編集を見てください。 – EJP