問題タブ [serializable]
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 - HttpServlet が Serializable を実装するのはなぜですか?
サーブレットについての私の理解では、サーブレットはコンテナーによってインスタンス化され、そのinit()
メソッドは一度呼び出され、サーブレットは JVM がシャットダウンするまでシングルトンのように存続します。
アプリサーバーが回復するか、正常に起動すると、サーブレットが新しく構築されるため、サーブレットがシリアライズされるとは思いません。サーブレットはセッション固有のメンバーを保持してはならないため、ディスクに書き込んで再度インスタンス化しても意味がありません。これには実用的な用途がありますか?
私の懸念は、そこにいくつかのシリアル化できないフィールドを配置すると、別の種類のセッション レプリケーションが行われる本番環境でアプリが不思議なことに失敗することです。
locking - テーブル行で Dibs を呼び出す
私が抱えている問題はこれです:
次のフィールドを持つテーブル(単なる例)があります。
次のことを行う IncreaseByFive() というメソッドがあります。
私が避けたいのは、次の状況です。
- ユーザー A がメソッドを呼び出し、値を取得します (現在は 5)
- ユーザー B がメソッドを呼び出して値を取得します (現在は 5)
- ユーザー A が値を 5 増やします (現在は 10)
- ユーザー B が値を 5 増やします (現在は 10)
- ユーザー A が値を保存 (10)
- ユーザー B は値を保存します (10)
これで、レコードの値が 15 になるはずが 10 になりました。
私が強制したいのは次のとおりです。
- ユーザー A がメソッドを呼び出し、値を取得します (現在は 5)
- ユーザー B はメソッドを呼び出しますが、A が既に呼び出しているため、待機する必要があります。(ディブ!)
- ユーザー A が値を増やします (現在は 10)
- ユーザー B はまだ待機中です
- ユーザー A が値を保存します (レコードの値は 10)
- ユーザー B は値 (10) を読み取ることができるようになりました。
- ユーザー B が値を増やします (15)
- ユーザー B が値を保存する
これで、レコードの値は 15 になりました。これが、探している結果です。
過去に静的クラスを使用してこの問題を解決し、そのクラスのコンストラクター内で作成された静的オブジェクトにロックを設定して、すべての作業を 1 つの静的メソッドに集中させ、他の呼び出しを順番に待機させました。ただし、これはスケーラブルではありません。
また、トランザクションの最高の分離レベル (シリアル化可能) も、上記の不要な例のステップ 2 での読み取りを許可するため、うまくいかないと思います。
別の解決策は、独自のロックテーブルを作成してそこにロックを記録することだと思いますが、それは必要ではないようです。
私はこのプロジェクトを C# (3.5) と SQL サーバー 2008 で開発しています。
ハイブマインドは何を考えていますか?
c# - ISerializable を DataContractSerializer で使用する場合、シリアライザーが型情報を出力しないようにするにはどうすればよいですか?
シリアル化をより詳細に制御するために、クラスを から[DataContract]
に変換し、 と特別な逆シリアル化コンストラクターの[Serializable]
両方を実装しました。GetObjectData
これを行うと、発行された XML の型情報がすべての要素に適用されます。私はこの余分な情報を望んでおらず、シリアライザーにそれを出力しないように通知する方法を考えています。
を使用するサンプル コードは次の[DataContract]
とおりです。
これにより、次の XML が出力されます (Nullable Number および Number に型情報がないことに注意してください。これが目的の出力です)。
上記のコードを次のように変更すると ([Serializable]、: ISerializable、および 2 つのシリアル化メソッドを追加):
次の XML を発行するようになりました。各要素に追加された型情報 (i:type="x:int") に注意してください。
なぜこれを行うのですか?それをやめさせるにはどうすればよいですか?
ありがとう!
return-value - 例外、リターン、シリアライズ可能、
throw Exception
( ) と ( return value
) は Java や C# などの言語でどのように実装されていますか? の使用法だけでなく、そのサポートが言語にどのように含まれているかのメカニズムを知りたいですtry { .... } catch (Exception) {}
。
関数をいつ呼び出すかを知っています。
次に、呼び出しがスタックに置かれ、メソッドが呼び出しを返すと、doSomething
スタックが飛び出します。
return ステートメントが値を返した場合、たとえばreturn 4;
、スタック上の への呼び出しがdoSomething()
ポップアウトし、Prog カウンターの次のステートメントが処理された場合はどうなりますか? 返された値はどうなりましたか? それはどこに保存され、どのように利用されますか?
同様に、例外スローの場合、throw ex;
ステートメントはスタック上で適切なcatch
ステートメントを見つけ、それが見つかるまで、スタックから何かをポップし続けます... このメカニズムはどのように機能しますか?
c# - プライベート メンバー データのシリアル化
オブジェクトを XML にシリアル化しようとしています。この XML には多くのプロパティがあり、そのうちのいくつかは読み取り専用です。
クラスを [Serializable] とマークし、ISerializable インターフェイスを実装しました。
以下は、オブジェクトをシリアル化するために使用しているコードです。
残念ながら、このメッセージで最初の行に落ちます。
InvalidOperationException が処理されませんでした: 一時クラスを生成できません (結果 = 1)。エラー CS0200: プロパティまたはインデクサー 'MyObject.Id' を割り当てることができません -- 読み取り専用です
Id プロパティを public に設定すると、正常に動作します。私が何かをしているかどうか、または少なくともそれが可能であるかどうかを誰かに教えてもらえますか?
c# - ISerializableインターフェースのポイントは何ですか?
そのインターフェースを持たないクラスをシリアル化できるようですので、その目的がわかりません。
java - シリアライズ可能なメソッドを実際に実装しているのは誰ですか?
の使い方を学んでいますSerializable
。
実装するさまざまな変数を持つクラス「A」を作成し、クラスSerializable
に追加Serializable
すると、それもSerializable
.
しかし、これら 2 つの方法をシリアライズするために実際に実装しているのは誰でしょうか? 必要に応じて、すべてを処理しますかObject
、それとも別のクラスでそれらをオーバーロードしますか?
java - メソッドを追加すると、クラスで Java が計算した serialVersionUid が変更されますか?
このようなクラスがある場合:
別のメソッドを追加すると (フィールドを追加しないと)、計算された serialVersionUID は変更されますか?
たとえば、次のメソッドを追加します。
または、これを理解するための優れたツールはありますか?