タイトル : Re^7: .netでのストリームの扱い 投稿日 : 2015/09/02(Wed) 16:22 投稿者 : 魔界の仮面弁士
> bin の部分が、fiddlerの表示で system.byte[]となっていて > 画像の内容が入っていないようです。 > writer.Write(rawBin) Stream クラスの Write メソッドには、 Sub Writer( value() As Byte ) に相当するオーバーロードがありません。上記のコードからは、 Sub Writer( value As Object ) のオーバーロードの呼び出しとして扱われます。 https://msdn.microsoft.com/ja-jp/library/dfc2b8zk.aspx 》 オブジェクトで ToString メソッドを呼び出して、 》 そのオブジェクトのテキスト形式をテキスト文字列またはストリームに書き込みます。 今回の場合は、Stream 系クラスすべてが持つ Sub Write( buffer() As Byte, offset As Integer, count As Integer ) のメソッドを使って、 .Write(raw, 0, raw.Length) とすると良いでしょう。 もしくは、テキストの書き込みには StreamWriter を使うようにし、 バイナリの書き込みには BinaryWriter を使うという、併用案もあります。 Imports System Imports System.IO Imports System.Text Module Module1 Sub Main() Dim txt As String = "ABCDEF" Dim raw() As Byte = {1, 2, 3, 4, 5} Dim enc As New UTF8Encoding(False) Using ms As New MemoryStream() Dim txtWriter As New StreamWriter(ms, enc) txtWriter.AutoFlush = True Dim binWriter As New BinaryWriter(ms, enc) txtWriter.Write(txt) binWriter.Write(raw) ms.Position = 0 Dim bin() As Byte = ms.ToArray() '「41-42-43-44-45-46-47-01-02-03-04-05」になるはず Console.Clear() Console.WriteLine(BitConverter.ToString(bin)) End Using Console.ReadKey() End Sub End Module あるいは StreamWriter や BinaryWriter の類は一切使わずに、すべてを Sub Write( buffer() As Byte, offset As Integer, count As Integer ) で済ませるという手もあります。 (文字列を書き込む場合には、Encoding クラスの GetBytes メソッドを使ってバイナリ化する) |