オブジェクトを直列化および逆シリアル化できるクラスを作成しようとしています。クラスはこのように動作するはずです。オブジェクトをシリアル化してサーバーに送信し、サーバーがオブジェクトの1つのフィールドを変更して戻して、受け取ったオブジェクトを逆シリアル化できます。しかし、私がoutputStreamを閉じると、ソケット書き込みエラーが発生します。 outputStreamとinputStreamを正しく閉じるにはどうすればよいですか?ObjectInputStreamとObjectOutputStreamを閉じる正しい方法
編集:私はトライして、リソース使用 場合でも、私はまだこれは私が取得しています例外はある
同じエラー
public class UtilSerialize {
InetAddress address;
Socket socketConnection;
public UtilSerialize() {
try {
this.address = InetAddress.getLocalHost();
socketConnection = new Socket(address, 8000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void serializeObject() {
try {
OrdinaryUser user = new OrdinaryUser("Joe", "Joe");
ObjectOutputStream clientOutputStream = new ObjectOutputStream(socketConnection.getOutputStream());
clientOutputStream.writeObject(user);
System.out.println(user.getUsername());
//clientOutputStream.close();
} catch (Exception e) {
System.out.println(e);
}
}
public void deSerializeObject() {
try {
ObjectInputStream clientInputStream = new ObjectInputStream(socketConnection.getInputStream());
OrdinaryUser user = (OrdinaryUser) clientInputStream.readObject();
System.out.println(user.getUsername());
clientInputStream.close();
} catch(Exception e)
{
e.printStackTrace();
}
}
}を取得し、それはサーバ側にあります。
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)
at java.io.ObjectOutputStream.writeNonProxyDesc(Unknown Source)
at java.io.ObjectOutputStream.writeClassDesc(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeFatalException(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at ro.unitbv.serverinvoicemanagement.classes.ServerThread.run(ServerThread.java:29)
at java.lang.Thread.run(Unknown Source)
正しい方法は[try-with-resources](http://stackoverflow.com/q/26516020/6948900) –
'close()'と 'flush()'だけではないですか?基礎となるストリームを閉じないようにするには? –
彼はフラッシュしてからストリームを閉じる必要があります。 – efekctive