問題タブ [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 - Javaでのシリアライズ可能、クローン可能、およびメモリの使用
HashMapのサブクラスである内部クラスを使用しています。私はString
キーとdouble[]
値としてを持っています。1つあたり約200のダブルを保存しdouble[]
ます。キー、ポインター、およびダブルを格納するために約700MBを使用する必要があります。ただし、メモリ分析では、それよりもはるかに多く(2 GB強)が必要であることがわかりました。
TIJmp (プロファイリングツール)を使用すると、メモリ全体のほぼ半分を使用していることがわかりました。char[]
TIJmpはそれがとchar[]
から来たSerializable
と言ったCloneable
。その中の値は、フォントとデフォルトのパスのリストからメッセージと単一の文字までの範囲でした。
Serializable
JVMでの正確な動作は何ですか?したがって、常に「永続的な」コピーを保持し、メモリフットプリントのサイズを2倍にしますか?JVMをメモリを大量に消費することなく、実行時にオブジェクトのバイナリコピーを書き込むにはどうすればよいですか?
PS:メモリ消費量が最も増える方法は以下のとおりです。このファイルには、約229,000行と1行あたり202フィールドがあります。
Oh !、そしてHashMapXは次のように宣言された内部クラスです:
android - Android:marshall()を使用せずにParcelableからSerializableへのショートカットはありますか?
Parcelable
(速い)とSerializable
(遅い)のパフォーマンスの違いを知っています。ただし、特定のアプリケーション情報を1つのライフサイクル内だけでなく永続的に保存する必要があるため、onSaveInstanceStateおよびParcelableオブジェクトを利用する関連メソッドは適切ではありません。
だから私はに注意を向けましたSerializable
。主にAbstractList
保存するタイプがあります-を実装しているので問題ありませんSerializable
。しかし、私がこれらの中に保存するタイプの多くは、そうではParcelable
ありません。Serializable
RectF
パーセルを簡単に生成し、Parcelable.writeToParcel(parcel, flags)
それを呼び出してシリアル化および逆シリアル化できるmarshall()
を作成できるので、「問題ありません」と思いました。byte[]
ジェネリックを使用すると思いました。SerializableParcelable<Parcelable> implements Serializable
クラスを作成し、Parcelable
シリアル化するすべてのタイプに1つのソリューションを提供します。次に、たとえば、各RectFをこのラッパー内ArrayList
に格納します。リストとそのParcelable
内容はシリアル化可能です。
ただし、APIドキュメントにはmarshall()
、永続ストレージに使用してはならないことが記載されています。
public final byte [] marshall()
区画の生のバイトを返します。
ここで取得するデータは、いかなる種類の永続ストレージ(ローカルディスク上、ネットワーク経由など)にも配置しないでください。そのためには、標準のシリアル化または別の種類の一般的なシリアル化メカニズムを使用する必要があります。パーセルマーシャリング表現は、ローカルIPC用に高度に最適化されているため、プラットフォームのさまざまなバージョンで作成されたデータとの互換性を維持しようとはしません。
だから今私は立ち往生しています。この警告を無視して上記で概説したルートに従うか、Parcelable
シリアル化する各個人を拡張してオーダーメイドのシリアル化メソッドを作成することで問題を回避できます。これは時間と労力の非常に無駄に思えます。
誰かがParcelable
使用せずにオブジェクトをシリアル化するための「正しい」ショートカットを知っていmarshall()
ますか?または、指定された警告に注意せずに耕す必要がありますか?おそらくSQLiteデータベースがその方法ですが、よくわかりません。アドバイスをお願いします。
どうもありがとう。
java - Groovy Expando シリアライズ可能
動的に追加されたプロパティで取得できる expando サブクラスをシリアル化する方法はありますか。例を挙げて;
と
私は出力を取得します:
Sexpandoオブジェクトの元のtestPropフィールドでも同じ例を試しました(上記でコメントアウトされています)
Groovy のオリジナルの Expando.java はHEREから調べることができます
アドバイスありがとうございます!
java - シリアル化可能なクラスを拡張しました。リモート呼び出しでの使用方法は?
これが私の状況です:
サーバー アプリケーションがあり、Bean オブジェクトを呼び出しパラメーター/戻り値として使用するリモート インターフェイスを提供しています。これらはもちろんシリアライズ可能です。たとえば、外科で働く医師。
私のローカル アプリケーションでは、これらの呼び出しオブジェクトを拡張しました。たとえば、医師にはパスワード フィールドが追加されているため、医師のパスワードをローカルに保存できます。これで、ローカル オブジェクトもシリアライズ可能になりました。また、これを使用して、ローカル ネットワーク経由でこれらを送信しています。
サーバーへのリモート呼び出しで拡張実装のオブジェクトを使用する最も簡単な方法は何ですか? サーバーは私の特殊化されたクラスを知らないため、シリアライズされた実装を明らかに再構築できません。
新しいフィールドを除くすべてのフィールドを基本的にコピーして、拡張された Bean オブジェクトから拡張されていない Bean オブジェクトを手動で作成する必要がありますか? または、これを行うためのより良い/簡単な方法はありますか? 上で述べたように、ローカルオブジェクトも通常どおりシリアライズ可能にする必要があるため、シリアライゼーションメソッドを上書きすることはオプションではありません。
java - シリアル化されたオブジェクトをクライアントからSpringコントローラーに渡し、シリアル化されたオブジェクトの応答を返す最も簡単な方法は?
私はこれについて多くのチュートリアルを読んでいます。HttpClientを使用してPOSTを作成し、応答を返すことができましたが、渡された文字列を使用していました。たとえば、シリアル化したいなどのオブジェクトをMap <String, String> testMap = new HashMap <String, String> ()
作成し、これをクライアントからSpringコントローラーに渡します。次に、簡単にするために、この同じオブジェクトをSpringからクライアントに返したいと思います。HttpClientを使用するか、他の何かを使用するかは関係ありません。これを機能させる方法を考えたいだけです。
さまざまなアプローチを試してみましたが、うまくまとめられていないようです。誰かがこれを行うための簡単な方法を概説するリソースに私を向けることができますか?アドバイスをいただければ幸いです。
android - Android シリアライズ可能問題
いくつかのメンバー変数を持つクラスを作成しました。これらはすべてシリアライズ可能です... 1 つのビットマップを除いて! Bitmap を final クラスとは考えずに、bitmap を拡張して serializable を実装しようとしました。
クラスを保存して (基本的にはゲームの現在の状態を形成します)、プレーヤーがゲームをピックアップしてロードできるようにします。
私の見方では、2 つの選択肢があります。1) ゲームの状態を保存する別の方法を見つける。ここで何か助けていただければ幸いです。
2)ビットマップメンバー変数をintに変更し、intに基づいてビットマップを返す静的メソッドを持つBitmapGetterクラスを作成します。(このオプションは簡単ではありません。私のクラスには非常に多くのビットマップの可能性が含まれており、私がゲームを作成した方法では、信じられないほどの労力が必要になることを意味します。
基本的に、何も考えずにビットマップ変数を怠惰に作成したのは自分以外に責任はありませんが、助けていただければ幸いです...
java - Java RMI では、インターフェースが Web サーバー上でリモートとして公開されていますが、そうすべきではありません。
厄介な問題を抱えていますが、まずコンテキストを説明させてください。
このプロジェクトは単純なプロジェクトなので、RMI に慣れることができます。このプロジェクトは、株式市場サーバーと、サーバーから資金に関するデータを取得するクライアントです。
プロジェクトを 3 つの Java プロジェクトに分割しました。サーバー (MockStockMarket と Fund を持つ)、クライアント (GUI クラスとサーバーと対話するクラス: BannerController を持つ)、およびクライアントとサーバーの両方が必要とするインターフェース (IMStockMarket と IFund) を持つプロジェクト。
bannerController が StockMarket と通信して、bannercontroller が資金を取得できるようにします。これは getFunds() : ArrayList を使用して行われます。
ご覧のとおり、StockMarket は Remote で、Fund は Serializable である必要があります。
問題は、何らかの理由で次のコードを使用する場合です。
IStockMarket (意図したとおり) と IFund (意図したとおりではない) の両方がリモートになります。これは私が望むものではありません。
記録のために: Fund は Serializable を拡張する IFund を実装し (リモートは何もない)、MockStockMarket は UnicastRemoteObject を拡張し、Remote を拡張する IStockMarket を実装します。
両方のインターフェイスを公開する Web サーバーのスクリーンショットを次に示します: http://imageshack.us/m/194/4755/rboothinterfacespublis.png。
ソース コード: https://rapidshare.com/files/2085773800/stockmarket.zip
spring - 春の取引でひとつのつながり?
接続と春の取引に関するいくつかの質問があります。
DML および DDL 操作を実行する複数のメソッドがトランザクションで実行される場合、Spring は同じ接続インスタンスを使用しますか (伝播レベルが必要です)? 同じ接続を維持することを読みましたが、技術的にそれを行う理由と方法がわかりませんか? Spring のソース コードでヒントが提供されているかどうかを説明している間、それは役に立ちます。
分離レベルとして Serializable を使用する場合、Spring Declarative Transactions を使用すると、Spring は、そのメソッドまたは元のトランザクション メソッドから呼び出される他のメソッドでデータベース操作を実行している間、常に 1 つの接続が使用されるようにしますか?
このトピックを考慮して、Spring Transactions を使用する際に留意すべき点はありますか?
このトピックに関するご意見/ヘルプをいただければ幸いです。ありがとう。
更新 1 - 申し訳ありませんが、分離レベルの代わりにシリアライズ可能な伝播レベルを書いてしまいました。修正しました。
android - シリアライズ可能なパーセルブルの問題: RuntimeException: Parcelable でシリアライズ可能なオブジェクトの書き込み中に IOException が発生しました
皆さん、私はParcelableにしたい最も単純なクラスを持っています。私は次の方法でそれをやっています:
シンプルですね。はい、似ています。しかし、クラス オブジェクトを別のアクティビティにパーセル オブジェクトとして送信しようとすると、次のようになります。
次の例外が発生します。
ここにあるものがシリアル化できないことを本当に理解できませんか?
java - ネストされた基本クラスに対する不可解な Netbeans シリアライズ可能警告
次のクラスを定義すると
Netbeans 6.9.1 では、アウターとインナーの両方に対して「serialVersionUID の定義がありません」という警告が表示されます。この警告に正当な理由があるのか 、それともバグなのか疑問に思っています。内部クラスを拡張すると、コンパイラは Serializable を実装していると考えるようになりますか?
注: これは、この不必要なデザイン パターンが必要というよりは、好奇心によるものです。