Ich frage mich, ob es trotzdem zu prüfen ist, ob ObjectInputStream
oder ObjectOutputStream
leer ist oder nicht. Ich meine, in meinem Programm. beim ersten Mal, wenn es läuft, ObjectInputStream
wird seine readObject()
Methode dann verwenden, weil immer noch die Datei leer es gibt mir eine EOF
Ausnahme (Ende der Datei), also würde ich gerne prüfen, ob es leer ist oder nicht dann loswerden die Ausnahme:EOF-Ausnahme für readObject
Und mache ich es richtig? Zum Serialisieren habe ich die Klasse mit dem gleichen Namen und Attribut wie unten in Client und Server erstellt.
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);
}
bearbeiten 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();
// ......
}
bearbeiten 3:
die EDIT2 Codes mich mit dem Stacktrace folgende Ausnahme gab:
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)
Wo haben Sie den ObjectOuputStream initialisiert? – Phani
@Phani habe ich es zur Frage hinzugefügt. Ich habe vergessen, es hier zu schreiben – lonesome
Siehe meine Bearbeitung Ihrer 2. Bearbeitung. – EJP