問題タブ [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.

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

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 を実行する場合、このような問題は発生しないことに注意してください。