問題タブ [objectoutputstream]
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.
java - ObjectOutPutStream をリセットして新しいオブジェクトの状態を更新しますか?
ObjectOutPutStream をリセットして、新しいオブジェクトの状態を更新したいと考えています。しかし、なぜそれは効果がありません。以下のコードは「AFTER」ではなく「BEFORE」を出力しますか? コードの何が問題になっていますか?
java - 複数のクライアントを持つ Java SocketServer - StreamCorruptException
アプリケーション
ObjectStream クラスを使用してソケットを介してオブジェクトを送信することで通信するクライアント/サーバー アプリケーションを Java で作成しています。アプリケーションの各ノードは、おおよそ次のようになります。
ここで、server
変数はこのノードがリッスンするソケットであり、client
変数は他のノードがリッスンし、このノードがオブジェクトを送信するソケットです。
クライアント ソケットの 1 つにオブジェクトを書き込むために使用するコードは、次のようになります。
接続を処理し、ノードのサーバー ソケットからオブジェクトを読み取るために使用するコードは、次のようになります。
問題
ここのソケットに何か問題があると思います。すべてのサーバーが単一のクライアントにのみ接続されている場合、すべてが正常に機能します。ただし、複数のクライアントが同じサーバーと通信している場合、事態は悪化し、ObjectInputStream から StreamCorruptedException が発生し、その他の奇妙な動作 (UpdateRequest メッセージのインスタンスを挿入し、Integer(0) のインスタンスといくつかの例外を取得する) が発生します。例えば。)
私の直感では、2 つのオブジェクト/バイト ストリームが何らかの形で混ざり合っており、オブジェクトを逆シリアル化しようとすると奇妙な結果が生じることがわかります。私の質問は、なぜこれが起こっているのか、何が間違っているのか、どうすれば修正できるのでしょうか?
java - ObjectOutputStream への追加 (ストリームを閉じずに複数のオブジェクトを書き込む)
免責事項私の質問は、次の 2 つのリンクとは異なります
- 上記のソリューションの問題は、ストリームを閉じることなく追加可能なストリームに複数のオブジェクトを書き込むことをサポートしていないことです。
- 追加可能なストリームを開いて複数のオブジェクトを書き込むと、読み取り時に最初のオブジェクトのみを適切に読み取ることができ、2 番目のオブジェクトを読み取ろうとすると EOF 例外が発生します。
追加可能なストリームにオブジェクトを書き込むような方法で進むと、ストリームを閉じます。次に、再びストリームを開き、別のオブジェクトを閉じて書き込みます。このようにして、複数のオブジェクトを適切に読み取ることができます。
/li>
java - ObjectOutputStream の後に POJO をキャストできない
サーバーからクライアントに POJO を送信するプログラムがあります。String[]
orのようなプリミティブ データ型の場合Boolean
、正常に動作します。ゲッターとセッターだけでカスタム データ型を作成し、それをサーバーからクライアントに送信し、Java オブジェクトからデータ型にキャストしようとすると、例外が発生します。
クライアントとサーバーの両方のインスタンスで、問題なくキャストできる場所。押してみるとObjectOutputStream
何か変なことが起きたようです。オブジェクトもシリアル化しました。ここに ObjectOutputStreams に関する問題はありますか?
java - ソケットと objectoutputstream を使用して文字列配列を送信する方法
文字列または整数を送信するためにこれを持っていますが、文字列配列を送信したい場合は何を使用すればよいですか?
前もって感謝します
java - ランダムアクセスファイルからのオブジェクトの読み取り
RandomAccessFilesを使用するJavaのFileChannelクラスを使用してファイルを作成しました。ファイル内のさまざまな場所にオブジェクトを書き込みました。オブジェクトのサイズは可変でしたが、すべて同じクラスでした。私は次のアイデアを使用してオブジェクトを作成しました:
今、私はそのようなファイルから読みたいです。読み取るバイト数を指定する必要はありません。オブジェクト入力ストリームを使用してオブジェクトを直接読み取れるようにしたい。これを達成する方法は?
ファイル内のさまざまな位置に書き込む必要があるため、ランダムアクセスファイルを使用する必要があります。また、オブジェクトが書き込まれた場所を別のデータ構造で記録しています。
java - シリアル化可能なオブジェクトをソケット経由で送信するときの NotSerializableException?
ソケット接続を介してカスタムメイドのオブジェクトを送信しようとしています。NotSerializableException
クラスはシリアル化可能を実装しますが、オブジェクトをソケットに書き込もうとすると、コンストラクターはまだスローします。以下に関連するコードを投稿します。
これは私のカスタムメイドのクラスです。今のところ、サーバーからクライアントに配列リストを送信しようとしていますが、後の段階で追加情報を追加します。send メソッドは、私のサーバー クラスに以下に掲載されています。
これは、サーバーからの送信方法です。clientCollection
送信しようとしているarrayListです。
Client クラス全体:
}
新しいスタックトレース:
android - Rect などのオブジェクトをシリアル化していないシリアル化されたクラスを保存する
アクティビティが onDestroy() を呼び出すときにシリアライズされたオブジェクトを保存しようとしていますが、ObjectOutputStream を使用してオブジェクトを書き込もうとすると、java.io.NotSerializableExeption がスローされます。
手伝ってくれませんか。ありがとう
java - ソケット経由でファイルを送信した後に「java.io.EOFException」を取得する
私はソケットを介して基本的な通信を実装しようとしています。今持っているものは次のとおりです。
サーバーはソケットでリッスンし始めます。
/li>クライアントが接続し、サーバーが別のスレッドを開始してそのクライアントで動作し、
オブジェクトの出力ストリームと入力ストリームの両方を開きます。
/li>クライアントは、そのストリームを介して 2 つの i Double、String、および Long を送信します (それぞれの後にフラッシュします)。
/li>サーバーは、以前に開いたストリームを介してこれらのオブジェクトを正常に受信し、
/li>そして今、「難しい部分」、
クライアントがファイルを送信したいので、別の出力ストリーム (オブジェクト出力ストリームではない) を開き、ファイルを送信します。
/li>サーバーはファイルを受信します (ObjectInputStream の代わりに単純な入力ストリームも使用します)。
/li>これまでのところ、すべてが正常に機能し、ファイルが受信されましたが、サーバーはそのファイルに対して時間のかかる処理を実行し、その後クライアントに結果を含む応答を送信します。
/li>クライアントは、通信全体を終了する結果を受け取ることになっています。
/li>
残念ながら、クライアント側の最後のステップは例外で失敗します:
ファイルの送信後にサーバーの応答を待ってクライアントをブロックしたいのですが、ファイルの送信後に突然例外で終了します。単純なストリームとオブジェクト ストリームを切り替える際に何か問題があると確信しています。
それを機能させるために何を変更すればよいか誰かが知っていますか?
前もって感謝します!
java - Java で ObjectInputStream を介してオブジェクトを送信できません
オブジェクトの出力ストリームと入力ストリームを利用するアプリを作成しています。ただし、オブジェクトを適切に送信できないため、問題があります。ストリームに書き込むと、クライアントとサーバーの両方が同じシリアル ID を持つこのクラスのまったく同じコピー (唯一の違いはパッケージ名) を持っていても、サーバーはクラスが見つからないという例外を返します。これが私のクラスです:
それは私が送信したいオブジェクトのクラスです。クライアントコードは次のとおりです。
(テスト用に書いています)
ここにサーバーコードの一部があります(はい、マルチスレッドです):
私は今かなり混乱しています。どうしてそんなことが起きているのかわからないからです。
メッセージを文字列に置き換えると、次のコードがうまくいくという私の意見で最も重要なことは何ですか。