ユーザーがソケット接続を介してファイル(画像/ビデオ...)を送信できるようにするクライアント/サーバーチャットアプリケーションに取り組んでいます。
あらゆるコミュニケーションを管理するために、送信したいすべての情報を格納するオブジェクト「パケット」を使用します。(送信者、受信者、ファイル...)。
これが私がストリームに書くコードサンプルです:
private void write(Packet packet) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(bos);
os.writeObject(packet);
this.outStream.write(bos.toByteArray());
}
そして、outStreamはOutputStreamです。
これが私の接続実行です:
public void run() {
while (isRunning()) {
try {
byte[] buffer = new byte[65536];
// Read from the InputStream
inStream.read(buffer);
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(buffer));
Packet p = (Packet) in.readObject();
} catch (IOException e) {
e.printStackTrace();
this.disconnect();
}
}
}
ファイル転送以外のすべての目的で非常にうまく機能します!ファイルをbyte[](filestreamを使用)に入れ、配列をパケットオブジェクトに格納します。サーバーが通信を受信すると、「in.readObject()」で中断し、かなりの「java io streamcorruptedexception間違った形式:0」の例外が発生します。
カスタムbyte[](string.getBytes()で埋められている)を使用して転送を試しましたが、非常にうまく機能しました。
それで、私は何を間違っているのですか?