問題タブ [genson]
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 - ソケット ストリームからの読み取り中の Genson の非常に奇妙な動作
Genson ライブラリを使用してサーバーとクライアント間の通信を実行しようとしています。次の問題を検出しました: サーバーにメッセージを送信しようとすると、サーバー上の genson がメッセージを読み取ろうとしているときにアプリケーションが停止します。
一方、クライアントをシャットダウンすると、メッセージは完全に読み取られて処理されます。私はそれがデッドロックだと思っていましたが、確かではありません。
ネイティブ Java シリアライゼーションでは、このような問題はありません。
ここに私のサーバーがあります:
クライアントは次のとおりです。
この質問について何か助けていただければ幸いです。前もって感謝します。
編集:これは本当に奇妙です。私はいくつかの追加のテストを行いましたが、ここに私が得たものがあります:
追加クラス:
genson.serialize(Tester.TEST, socket.getOutputStream())クライアントのリクエストに書いたので、同じ奇妙な結果が得られました。しかし、結果を書いgenson.serialize(new Tester(Double.NaN), socket.getOutputStream())たことは予想されるものです。
さらに、Tester クラスの唯一のフィールドを タイプ と定義すると、またはint[]の値でのみ機能します。nullnew int[0]
それに加えて、int0 から 9 の範囲の整数をシリアル化して送信しようとすると、次の動作が観察されます。クライアントをシャットダウンすると、サーバーが常に0値を表示することを除いて、同じ奇妙なことです。
Double.NaNその上、 、Double.POSITIVE_INFINITY、および同様の定数については、Integer.MAX_VALUEまったく奇妙なことはありません (すべてが期待どおりに機能します)。
これらの追加のテストGensonでは、クラスは次のように定義されました。
ストリームを使用してファイルとの間で ser/deser を実行する場合、このような問題は発生しないことに注意してください。