C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: メモリストリームへの格納


(過去ログ 55 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■30706 / inTopicNo.1)  メモリストリームへの格納
  
□投稿者/ 初心者C# (1回)-(2009/01/04(Sun) 00:25:48)

分類:[ASP.NET (C#)] 

いつも参考にさせていただいています。

バイト配列の値を結合してメモリストリームに格納しようと思っています。
#5でバイトのLength分だけ格納しようとしているつもりですが
現在のメモリストリームに格納されている分のバイト数分項目が作成されています。
[128]まで格納されているとすると[256]になってしまいます。
3回ループすると[512]になってしまい、[385]〜[512]が0の値がセットされてしまいます。
メモリストリームの内容をファイルに書き出しているのですが、無駄なスペースが
書き出されてしまいます。
何か良い方法はありませんか。
※どのように質問すればわかりやすいかわからず、思いつくまま書いてしまいました
ので分かりにくいかもしれませんが、アドバイスお願いいたします。

#1:System.IO.MemoryStream ms = new System.IO.MemoryStream();
#2:byte[] byteArray1 = GetBytes(文字列1);
#3:byte[] byteArray2 = GetBytes(文字列2);
#4:byte[] byteArray3 = GetBytes(文字列3);
#5:ms.Write(byteArray1, 0 , byteArray1.Length);
#6:ms.Write(byteArray2, 0 , byteArray2.Length);
#7:ms.Write(byteArray3, 0 , byteArray3.Length);

#2〜#7はループでまわしています。
引用返信 編集キー/
■30707 / inTopicNo.2)  Re[1]: メモリストリームへの格納
□投稿者/ Hongliang (327回)-(2009/01/04(Sun) 01:19:03)
GetBytes メソッドとやらがそういう作りになってるからでしょう。
GetBytes メソッドの中で、return する byte[] を作ってる部分を調べればどうなってるか分かるんじゃないですか?
引用返信 編集キー/
■30710 / inTopicNo.3)  Re[1]: メモリストリームへの格納
□投稿者/ も (64回)-(2009/01/04(Sun) 01:36:31)
No30706 (初心者C# さん) に返信
> いつも参考にさせていただいています。
>
> バイト配列の値を結合してメモリストリームに格納しようと思っています。
> #5でバイトのLength分だけ格納しようとしているつもりですが
> 現在のメモリストリームに格納されている分のバイト数分項目が作成されています。
> [128]まで格納されているとすると[256]になってしまいます。
> 3回ループすると[512]になってしまい、[385]〜[512]が0の値がセットされてしまいます。
> メモリストリームの内容をファイルに書き出しているのですが、無駄なスペースが
> 書き出されてしまいます。
> 何か良い方法はありませんか。
確認した方法も良くわかりませんが、どのような入力をしたらそうなったのかも良くわかりません。
またGetBytes()はどんな関数でしょうか?
(「そのように書いたからそのように動いているのでは?」という返答を貰う可能性があります)

> ※どのように質問すればわかりやすいかわからず、思いつくまま書いてしまいました
> ので分かりにくいかもしれませんが、アドバイスお願いいたします。
コピペで動くコードと一緒に質問すれば楽です。
思い違いも少なくなりますし。
引用返信 編集キー/
■30711 / inTopicNo.4)  Re[2]: メモリストリームへの格納
□投稿者/ 初心者C# (3回)-(2009/01/04(Sun) 02:03:40)
No30707 (Hongliang さん) に返信
> GetBytes メソッドとやらがそういう作りになってるからでしょう。
> GetBytes メソッドの中で、return する byte[] を作ってる部分を調べればどうなってるか分かるんじゃないですか?

byteArray1には文字列分しか格納されていません。
byteArray1.Lengthもそうなんですけど・・・。


引用返信 編集キー/
■30712 / inTopicNo.5)  Re[2]: メモリストリームへの格納
□投稿者/ 初心者C# (4回)-(2009/01/04(Sun) 02:04:29)
No30710 (も さん) に返信
> ■No30706 (初心者C# さん) に返信
>>いつも参考にさせていただいています。
>>
>>バイト配列の値を結合してメモリストリームに格納しようと思っています。
>>#5でバイトのLength分だけ格納しようとしているつもりですが
>>現在のメモリストリームに格納されている分のバイト数分項目が作成されています。
>>[128]まで格納されているとすると[256]になってしまいます。
>>3回ループすると[512]になってしまい、[385]〜[512]が0の値がセットされてしまいます。
>>メモリストリームの内容をファイルに書き出しているのですが、無駄なスペースが
>>書き出されてしまいます。
>>何か良い方法はありませんか。
> 確認した方法も良くわかりませんが、どのような入力をしたらそうなったのかも良くわかりません。
> またGetBytes()はどんな関数でしょうか?
> (「そのように書いたからそのように動いているのでは?」という返答を貰う可能性があります)
>
>>※どのように質問すればわかりやすいかわからず、思いつくまま書いてしまいました
>>ので分かりにくいかもしれませんが、アドバイスお願いいたします。
> コピペで動くコードと一緒に質問すれば楽です。
> 思い違いも少なくなりますし。

今はプログラムの一部なので簡易に動作するプログラムを作成してみます。
引用返信 編集キー/
■30716 / inTopicNo.6)  Re[3]: メモリストリームへの格納
□投稿者/ なちゃ (245回)-(2009/01/04(Sun) 09:24:29)
No30712 (初心者C# さん) に返信
>メモリストリームの内容をファイルに書き出しているのですが、無駄なスペースが
>書き出されてしまいます。

最後に書き出すときに、MemoryStream.GetBuffer使ってませんか?
MemoryStream.ToArrayだとうまくいきませんか?
詳しくはMSDNの説明を読んでみてください。


引用返信 編集キー/
■30717 / inTopicNo.7)  Re[4]: メモリストリームへの格納
□投稿者/ なちゃ (246回)-(2009/01/04(Sun) 11:01:16)
No30716 (なちゃ さん) に返信
> MemoryStream.ToArrayだとうまくいきませんか?

あるいは、書き出し時にMemoryStream.Lengthで長さ分だけ書いてもいいはずです。

サイズが非常に大きくなる可能性があるならこっちのが望ましいかも知れません。
まあ多分現実には問題ないと思いますし、そもそもその場合は直接ファイルに書くべきでしょうけど。

引用返信 編集キー/
■30754 / inTopicNo.8)  Re[4]: メモリストリームへの格納
□投稿者/ 初心者C# (5回)-(2009/01/05(Mon) 22:30:04)
No30716 (なちゃ さん) に返信
> ■No30712 (初心者C# さん) に返信
> >メモリストリームの内容をファイルに書き出しているのですが、無駄なスペースが
> >書き出されてしまいます。
>
> 最後に書き出すときに、MemoryStream.GetBuffer使ってませんか?
> MemoryStream.ToArrayだとうまくいきませんか?
> 詳しくはMSDNの説明を読んでみてください。
>
>

>>#1:System.IO.MemoryStream ms = new System.IO.MemoryStream();
>>#2:byte[] byteArray1 = GetBytes(文字列1);
>>#3:byte[] byteArray2 = GetBytes(文字列2);
>>#4:byte[] byteArray3 = GetBytes(文字列3);
>>#5:ms.Write(byteArray1, 0 , byteArray1.Length);
>>#6:ms.Write(byteArray2, 0 , byteArray2.Length);
>>#7:ms.Write(byteArray3, 0 , byteArray3.Length);
のあとに
>>#8:byte[] byte = ms.GetBuffer();
と記載している個所をms.ToArray()にすることでうまくいきました。

返信くださった皆様ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -