問題タブ [objectinputstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
423 参照

java - Javaの逆シリアル化:バッファから読み取るときにオブジェクトの最後に到達したことをどのように知ることができますか?

いいタイトルを考えてみましたが、失敗したようです。これが私の問題です:

ソケットからデータを読み込んでいます。バッファに含まれるデータはシリアル化されたオブジェクトです。データが完全に読み取られたら、ObjectInputStreamを作成し、readObjectを使用してデータを読み込むことができます。

私の問題は、私のソケットクラスがバイトを読み取っているので...完全なオブジェクトを受け取ったことをどのように知ることができますか?オブジェクトの終わりのインジケーターがないようです。シリアル化されたバイトコードの内訳を探して長さフィールドを見つけることができるかどうかを確認しようとしましたが、シリアル化のバイトコードはGoogleで見つけることができる場所では十分に説明されていません。

私が受け取っているオブジェクトは、違いが生じる場合はハッシュマップ(java.util.Map)です。

これが私が使用しているコードの一部です:

だから、私の質問は、私がm_DataInを読んでいるときに、オブジェクトの終わりに到達したことをどのように判断するのですか?

注:これらのオブジェクトを受信して​​いるサーバーを変更することはできません。それは私のコードではありません。

ありがとう。

チャールズ。

0 投票する
1 に答える
1074 参照

java - BufferedOutputStreams の使用時に ObjectInputStream が初期化されない

ゲームのソケットを介してオブジェクトを送信しようとしていますが、送信に時​​間がかかり、ゲームがハングする可能性があります。BufferedOutputStreams と BufferedInputStreams を使用してデータを送信したいのですが、クライアント側で BufferedOutputStream を使用すると、サーバー側で ObjectInputStream が初期化されません。奇妙なことは、エラーがスローされないことです。

関連するコードのみを提供します。そうしないと、何が起こっているのかを説明するのに長い時間がかかるからです。ゲームごとに 2 つのクライアントが初期化されます。

私はすべてのフォーラムを調べてきましたが、うまくいくものを見つけることができませんでした。あなたが与えることができるどんな助けにも感謝します!

0 投票する
2 に答える
2275 参照

java - 1つのファイルから複数のオブジェクトを保存するにはどうすればよいですか?

後で使用できるように、アプリに複数のオブジェクトをローカルに保存したいと思います。

ObjectInputStream今、私の問題は、ファイル全体(federations.dat)を取得してからオブジェクトをロードする方法を知っていることです。object WHERE id = N「federations.dat」からsayをロードする方法はありますか?または、オブジェクトごとに個別のファイルを作成する必要がありますか?

これは私のロード方法です:

何か提案が思い浮かびますか?

0 投票する
2 に答える
3792 参照

java - FileOutputStreamのjava.io.EOFException

Student[]配列オブジェクトの記述された出力を読み取るクラスがあります

これがコードです

問題は、読み取り時にエラーが発生することです。Student[] studs = (Student[]) fileReader.readObject();

ここに述べられているように

何が問題になるのかについて何か考えはありますか?前もって感謝します..

これstudents_updated.datが書かれた方法です

このメソッドがどこにあるかのコンストラクターでObjectInputStream宣言されています

0 投票する
2 に答える
1466 参照

java - 毎回 ObjectOutputStream を再作成する必要がある

何人かが同様の質問をするのを見たことがありますが、これまで投稿した唯一の答えは、あなたはそれをする必要はないということです.

しかし、私は両方の方法でテストしましたが、この方法でしか機能しません。

サーバ側

クライアント側

これは一日中機能します。

しかし、これに変更すると-

(コードのさらに上に入力ストリームと出力ストリームを作成しました)

次に、サーバーから初めて正しいデータを正常に受信しましたが、その後は毎回、更新されたデータではなく同じデータを受信し、理由に関するエラーはありません。

0 投票する
2 に答える
983 参照

java - ObjectInputStreamへの繰り返しの書き込み

複数のクライアントと1つのサーバーがあります。サーバーは、各クライアントを1つのスレッドで処理します。クライアントは、custonオブジェクトをマスターに送信する必要があります。私はこれこれをチェックしました、java.io.StreamCorruptedException: invalid type code: ACそれはまさに私が持っているエラーについて話します。

しかし、私は提案された解決策を理解していませんでした。彼はObjectOutputStreamを継承し、simpleは2回目以降にヘッダーを書き込まず、オブジェクトを送信する必要があります。これは私にはうまくいきません。

TCPソケットを介してカスタムオブジェクトを送信する別の解決策はありますか?クライアントは10秒ごとにデータを収集し、送信されるオブジェクトを再作成します。

繰り返しの場合は申し訳ありませんが、似たような質問をたくさん読んでいますが、シナリオに対する答えが見つかりません。

前もって感謝します

編集

送信メソッド(クライアント内)

受け取る

0 投票する
1 に答える
388 参照

java - SignedObject から取得するときの InvalidObjectException

ObjectInputStream を使用して TCP 接続を介して、SignedObject に含まれる Message オブジェクトに含まれるオブジェクトを送信しています。基本的なコードは次のとおりです。

送信

受け取る

Message クラスは、フィールドのみでメソッドを持たない基本クラスです。フィールドの 1 つは Object Message.data で、この場合は siena.Filter または siena.Notification のいずれかが含まれています。SignedObject.getObject() を呼び出すと、InvalidObjectException が発生します。スタックトレースは以下です。

メッセージ転送のコードは正しいです。他のクラスの他の多くのケースで機能し、同じクラスの他のバージョンでも機能します。特定のバージョンの siena.Filter および siena.Notification では機能しません。

送信されているクラス (siena.Filter または siena.Notification) の readObject() メソッドが呼び出されていることがわかりますが、これが発生するはずなのかどうかはわかりません。siena メソッド内で例外がスローされていることはわかっていますが、これが InvalidObjectException を引き起こしていると推測しています。

問題は、siena.class.readObject() が例外をスローして適切に記述されていないことが問題なのか、それとも siena.class.readObject() がまったく呼び出されていることが問題なのかということです。後者の場合、どうすれば修正できますか?

ありがとう、デビッド

0 投票する
3 に答える
1986 参照

java - ObjectInputStream は空のオブジェクトを提供します (ただし、読み取ったファイルは空ではありません)

私はこのシリアル化可能なクラスを持っています。これは、バイナリ ファイルに文字列の ArrayList を格納するために使用します。

この配列が保存する必要があるデータでいっぱいになったら、このメソッドを使用して、文字列のarrayListでインスタンスを保存します。

最後に、アプリの init でこのメソッドを使用してファイルを読み込み、SaveState.instance 変数に以前に保存したデータを入力します。

データを保存すると、ファイルはデータのオブジェクト フィルで正しく作成されています。ファイルのディスク容量が 0KB を超えているためです。しかし、アプリを起動してデータをロードすると、SaveState.instance 変数が文字列の空の ArrayList を取得するため、ここで何か問題が発生しています。コードの何が問題なのですか?

ありがとう

0 投票する
2 に答える
6538 参照

java - ObjectInputStream readObject(): ClassNotFoundException

クライアント クラスとサーバー クラスの両方に、Data というまったく同じ内部クラスがあります。この Data オブジェクトは、以下を使用してサーバーから送信されています。

(d はデータ オブジェクト)

このオブジェクトはクライアント側で受信され、Data オブジェクトにキャストされます。

私はjava.lang.ClassNotFoundException: TCPServer$Dataこの行にObject receiveObject = input.readObject();

私の推測では、サーバー側で Data クラスを検索しようとしていて見つからないのですが、よくわかりません... どうすれば修正できますか?