問題タブ [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 投票する
6 に答える
15289 参照

java - Java ソケットプログラミング

Java ソケットを使用して単純なクライアント/サーバー アプリケーションを構築し、ObjectOutputStream などを試しています。

私は、この URL http://java.sun.com/developer/technicalArticles/ALT/socketsのチュートリアルに従っています。ソケットを介したオブジェクトのトランスポートについて話しているときは、途中から始まります。

クライアントのコードを参照してくださいhttp://pastebin.com/m37e4c577ただし、これは機能していないようで、何が機能していないのかわかりません。一番下にコメントアウトされているコードは、チュートリアルから直接コピーされたものです。これは、クライアント オブジェクトを作成する代わりにそれを使用するだけで機能します。

誰でも私が間違っていることを見ることができますか?

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

java - ObjectInputStream エラー

ObjectOutputStream を使用して、シリアル化されたオブジェクトのファイルを作成しています。次に、ObjectInputStream を readObject() メソッドで使用して、ファイルからオブジェクトを取得します。

初めてでもうまくいきます。つまり、ファイルが存在せず、それを開いて任意の数のオブジェクトを追加すると、ObjectInputStream オブジェクトを開いてすべてのオブジェクトにアクセスできます。

ただし、後で同じファイルを (append オプションを使用して) 開き、さらにオブジェクトを追加すると、ObjectInputStream オブジェクトは java.io.StreamCorruptedException: "invalid type code: AC" エラーを受け取り、新しいオブジェクトを開始する必要があります。

他の誰かがこれに遭遇しましたか?Deitel の本からいくつかの基本的な教科書の例に戻っても、同じエラーが発生します。

編集:これを見つけました-シリアル化されたストリームを閉じて追加モードで再度開いた後は、その末尾に追加することはできません。書き込みは機能しているように見えますが、後でファイルを読み取ろうとすると、java.io.StreamCorruptedException が発生します。「http://mindprod.com/jgloss/gotchas.html#SERIALIZATION」で

0 投票する
6 に答える
64938 参照

java - ObjectOutputStream への追加

に追加することはできませんObjectOutputStreamか?

オブジェクトのリストに追加しようとしています。次のスニペットは、ジョブが終了するたびに呼び出される関数です。

しかし、それを読み取ろうとすると、ファイルの最初のものしか取得できません。それから私は得るjava.io.StreamCorruptedException

私が使用していることを読むために

オブジェクトがいくつ存在するか分からないので、例外がないうちに読んでいます。Googleが言っていることから、これは不可能です。誰かが方法を知っているかどうか疑問に思っていましたか?

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

java - Java-ObjectInputStreamを解決します

オブジェクトをObjectInputStreamと区別する方法を教えてください。文字列、画像などのように...?

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

java - Java: ソケットクローズ接続と ObjectInputStream

私のコードは次のようになります。これはサーバー コードです ( Runnable)

私の問題は、クライアントが接続を閉じるとき、readCommand();コマンドが送信されてEOFExceptionスローされるまで、コマンドの読み込みを待機していることです。これは私のreadCommand方法です:

したがって、読む前に、接続が開いているかどうかを確認する必要があると思います。

編集:run -method コードを評価すると、EOFExceptionがスローされますtry-catch-body。しかし、彼はクライアントの受け入れをやめます。

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

java - java - 内部クラスの IO

ObjectOutputStream/ObjectInputStream を内部クラスにすることは可能ですか? OK を書き込んで、作成されたファイルを調べることができますが、ObjectInputStream を使用して読み戻そうとすると、オブジェクト o = oos.readObject(); を読み込もうとしているだけで EOFException が発生します。

  1. 同じ File オブジェクトを使用して両方のストリームを開くので、それは問題ではありません。
  2. 内部クラスの性質とは無関係のようです - public int だけを持つクラスは、より複雑なクラスと同じように失敗します。

次に進み、通常のクラスを作成し、送信者クラスでインスタンス化する必要がありますが、可能かどうか、可能でない場合は理由がわからないまま立ち去るのは嫌いです。

更新: 問題の原因となった関連する問題:

A. ObjectOutputStream と追加で書き込まれたファイルを再度開くことはできません。2 番目のヘッダーが書き込まれ、ファイルが破損します。

B. ByteOutputStream を使用してハッシュ ダイジェストを実行するために HashMap をシリアル化することは機能しません。これは、ObjectOutputStream ファイルから HashMap を読み戻すときに、ペアの順序が異なるため、ByteOutputStream から異なる byte[] を取得する可能性が非常に高いためです。内容は同じですが、byte[] (およびハッシュ ダイジェスト) は異なります。

これが誰かの時間を節約するのに役立つことを願っています。

0 投票する
4 に答える
9650 参照

java - 既存のjava.io.ObjectStreamに追加するにはどうすればよいですか?

java.io.StreamCorruptedExceptionのところ、オブジェクトを追加しようとすると取得します。私はそれを克服する方法をインターネットで検索しました。私がこれまでに見つけた答えは、それができないということです。この問題を回避する方法は、オブジェクトをリストに書き込んでから、リストをファイルに書き込むことです。

ただし、新しいオブジェクトを追加するたびに、そのファイルを上書きする必要があります。残業では最適な解決策ではないようです。

既存のオブジェクトストリームにオブジェクトを追加する方法はありますか?

0 投票する
5 に答える
4203 参照

java - ソケットで Java オブジェクト ストリームを使用した場合のパフォーマンスの問題

Java でソケットとオブジェクト ストリームを使用してローカル IPC を実行しようとしていますが、パフォーマンスが低下しています。

ObjectOutputStream を介してオブジェクトを送信し、Socket を介して ObjectInputStream を介して応答を受信する ping 時間をテストしています。

リクエスタは次のとおりです。

応答者は次のとおりです。

私が得ている結果は次のとおりです。

ping あたり: 80.35

ローカル トラフィックの場合、80 ミリ秒は遅すぎます。

Request クラスと Response クラスは非常に小さく、シリアル化は高速です。

私は単純に追加しようとしました:

ほとんど効果がありません。

ローカルホストへの ping の実行:

も高速です。

RedHat 2.4 で動作する Java バージョン 1.6.0_05l

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

java - java.net.SocketTimeoutException: 読み取りタイムアウト

クライアント サーバー アーキテクチャのアプリケーションがあります。クライアントは Java Swing / AWT で Java Web Start を使用し、sert は Tomcat で HTTP サーバー / サーブレットを使用します。通信はオブジェクトのシリアル化から行われ、ObjectOutput を作成してバイト配列をシリアル化し、それぞれ ObjectInputStream と呼ばれるサーバーに送信し、逆シリアル化します。

アプリケーションは、「SocketException read timeout」というエラーを表示し始める特定の同時実行時間まで正しく通信します。サーバーがサーブレット doPost メソッドでメソッド ObjectInputStream.getObject() を呼び出すと、エラーが発生します。

Tomcat が遅くなり、サーバーを再起動する必要があるクラッシュ時まで、すべてが機能した後、エラーによってサーバーの応答時間が減少し始めます。

誰かがこの問題を経験しましたか?

クライアントコード

サーバーコード

input.readObject() はエラーのある場所です

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

java - ObjectInputStreamのEOFExceptionは、java(w).exeではなくWebstartでのみ発生しますか?

アプリの起動とWebstart(javaws.exe)の起動の違いに精通している人。ストリームに関してjava.exeまたはjavaw.exeを使用していますか?

これは、Webstartを使用している場合にのみ発生する例外です。

これは私が両側の接続を設定する方法です

[編集]Webstartコンソールによると:Java Web Start1.6.0_19JREバージョン1.6.0_19-b04JavaHotSpot(TM)クライアントVMの使用

サーバーは同じ1.6u19を実行しています

[編集]JNLPに含まれるもの:

ありがとう