問題タブ [memorystream]
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.
c# - 任意のバイナリデータをバイナリシリアル化クラスに格納するにはどうすればよいですか?
アプリケーションにC#/。NETを使用すると、メインデータモデルに「バイナリ」(テキストではなく)コンテンツを表す一連のクラスがあります。私は次のような継承設定を持っています:
基本的に、抽象クラスには、任意のバイナリデータを格納BinaryContent
するが含まれています。MemoryStream
そのデータはディスク上のファイルから読み取られます。保存する予定のバイナリデータの各タイプは、やなどの派生タイプにImageContent
なりFontContent
ます。これらの派生型は、のバイナリデータを解釈しBinaryContent.Content
ます。ImageContent
たとえば、BitmapImage
MemoryStreamから(ImageSourceに格納された)を作成します。FontContent
もちろん、からフォントを作成しますBinaryContent.Content
。基本的にコンテンツファイル(つまり画像)のコピーを保存できるようにし、ファイルがディスク上の特定の場所に何度もあることに依存する必要がないようにするために、この方法を選択しました。
また、バイナリシリアル化を使用して、これらのクラスのインスタンスを「プロジェクトファイル」に保存しています。私はこれを基本的にすべてを一緒に「パッケージ化」するために行いました。MemoryStreamを逆シリアル化しようとすると、問題が発生するようです。MemoryStreamからイメージを作成すると、問題が発生します。デシリアライズ後に次のメソッドを実行すると、FileFormatexception
が発生します。
メッセージは次のFileFormatException
とおりです。「画像をデコードできません。画像ヘッダーが破損している可能性があります。」内部例外:「HRESULTからの例外:0x88982F61」
今のところ私の一番の推測は、BinaryContent.Content
シリアル化または逆シリアル化中にデータが破損する何かが起こっているということです。
これは私に2つの質問をするように導きます。
- この問題を解決するための提案はありますか?
- (逆)シリアル化される任意のバイナリデータを格納する他の提案された方法はありますか?
私の質問については、遠慮なく説明を求めてください。
ありがとう。
c# - ByteArrayのMemoryStreamへの配列
ByteArrayの配列を返すメソッドがあります。
MemoryStream
そして私はそれを:に書く必要があります
byteArrayの配列には要素が1つしかないため、これはこれまでのところ機能しています。誰かが指摘して解決策を提供できるでしょうか:byteArrayの配列に複数の要素がある場合はどうなりますか?
現在のコードでは、byteArrayの最初の要素を取得して残りを破棄すると思いますが、必要MemoryStream
であり、多次元配列を取得することはできません。
c# - C#非同期ソケット接続を介したシリアル化されたオブジェクトを含むオブジェクトのサイズの送信
オブジェクトをシリアル化してネットワーク経由で送信したい。クラスのISerializeable属性とBinaryFormatterを使用して、オブジェクトをバイトに変換するように設定しました。オブジェクトを送信し、受信側で逆シリアル化できます。ただし、オブジェクトを再構築する前にオブジェクト全体を確実に保持するために、ストリームと一緒にサイズを送信したいと思います。最初の数バイトをサイズとして設定し、受信したデータが少なくともこの固定サイズであるかどうかを確認すると、それを読み取ってオブジェクトのフルサイズを取得できます。次に、受信したデータがオブジェクトのサイズ+固定サイズのバイトになるまで待つだけです。オブジェクトのサイズを最初の数バイトとして格納し、オブジェクトを残りのバイトとして格納するintを送信できるように、ストリーム内のデータをオフセットするにはどうすればよいですか?
c# - ネイティブバッファをMemoryStreamに変換します
私のC++\ CLIには、次のコードがあります。
でMemoryStream(out_buf)
、メモリストリームはメモリを再度割り当てますか、それとも単に所有権を取得しout_buf
ますか?
メモリを再度割り当てる場合MemoryStream
、ネイティブバッファをに変換する方法はありMemoryStream
ますか?
.net - MemoryStream は明示的に破棄する必要がありますか?
MemoryStream は管理されていないリソースであるため、常に破棄する必要がありますか?
与えられた:
したがって、MemoryStream オブジェクトの参照は失われます。このシナリオには、try/finally ブロック (または using ステートメント) が必要ですか?
c# - メモリ内のテキストを表現する最良の方法
共通の基本クラスから継承する 2 つのクラスがあります。
これらの特殊なクラスはそれぞれ、データベースからデータをロードして処理し、その情報をテキスト ファイルに保存します。
最初のクラスは、情報を XML ドキュメントとして表します。2 番目のクラスは、その情報をテキスト ファイルとして格納し、フィールドを区切り文字で区切ります。
私がやりたいことは、両方のクラスで使用できる基本クラスに単一の Save メソッドを記述することです。すべてのクラスがテキスト ファイルに書き込むため、データをメモリに格納するために共通の表現を使用することを考えていました。たとえば、最初のクラスは XmlDocument をその共通の表現に変換します。
これをメモリ、文字列、ストリームに格納する最良の方法は何ですか?
ありがとう
c# - Python の MemoryStream アナログ
C# の類似物が Python に存在しますかMemoryStream
(これにより、何らかのソースから直接メモリにバイナリ データを書き込むことができます)。そして、どうやってそれを使うつもりですか?
c# - 関数が MemoryStream を返すことができるのに、なぜ MemoryStream nullable (MemoryStream?) を宣言できないのですか?
を返す関数がありますMemoryStream?
。エラーが発生した場合は null です。次に、変数を宣言できないことがわかりましたMemoryStream?
型 'System.IO.MemoryStream' は、ジェネリック型またはメソッド 'System.Nullable' でパラメーター 'T' として使用するために、null 非許容値型である必要があります。
c# - C#BinaryReader.Read()は、最初はがらくたになります
私はここで私が間違っていることを理解しようとしています。バイナリリーダーを使用して、ストリームから最初の4バイトをInt32値に簡単に取得しようとしています。これにより、残りのデータが予想される期間がわかります。
出力は入力である必要がありますが、これを取得します(最初の文字が文字列から文字列に変わることに注意してください)
(これが非常に長い文字列であると想像してください
誰かが私が間違っていることを私に説明できますか?理想的には、2回目の読み取りは、読み取りバイトの合計が最初の4バイトの値と等しくなるまで続きます。このコードは、私が直面している問題を示すための単純化にすぎません。ストリームの位置は正しいようですが(4)、2から読み始めているようです。
c++ - wistreamを使用してファイルから読み取るのと同じように、メモリから読み取るにはどうすればよいですか?
前の質問で、ファイルからと同じようにメモリから読み取る方法を尋ねました。ファイル全体がメモリ内にあったので、同じように読みたかったのです。
私は自分の質問に対する答えを見つけましたが、実際には行をとして読む必要がありますwstring
。ファイルで私はこれを行うことができます:
ファイルがASCIIであっても。
今、私は単にこの答えからの関数で私のstring
行を変更しています。ただし、このメモリのチャンクをaと同じように扱う方法があれば、この行をsとして取得する方が高速な解決策になると思います。そして、私はこれが速い必要があります。wstring
wistream
wstring
だから誰もがこのメモリのチャンクを?として扱う方法を知っていwistream
ますか?