0

OK、3.268.760ビット長のデータテーブルからビットを保存/取得する必要があります。

Using w As New BinaryWriter(File.Open("test.bin", FileMode.Create))
    for x = 1 to 3268760
        For i = 1 To 3268760
            w.Write(countBits(bitLikeness(u(i), u(x))) > 10)
        Next
     Next
End Using

w.write(?)false/true値に対して0/1を意味するブール値を格納しますが、Vb.netはこのデータを格納するためにバイト全体を使用しているようです。これは私のテーブルには高すぎます(3.268.760 ^ 2)

vb.netを使用してファイルからシングルビットを保存/取得する実用的な方法はありますか?(他のタイプへの変換をできるだけ少なくすることを意味します)。

4

1 に答える 1

1

BinaryReader/Writerをラップするのがおそらく最良のオプションです。

Public Class BitWriter

    Private ReadOnly mBinaryWriter As BinaryWriter

    Private mBuffer As Integer
    Private mBufferCount As Integer

    Public Sub New(binaryWriter As BinaryWriter)
        mBinaryWriter = binaryWriter
    End Sub

    Public Sub WriteBit(bit As Boolean)

        If mBufferCount = 32 Then

            mBinaryWriter.Write(mBuffer)

            mBuffer = 0
            mBufferCount = 0

        End If

        If bit Then mBuffer = mBuffer Or (1 << mBufferCount)

        mBufferCount += 1

    End Sub

    Public Sub Flush()

        mBinaryWriter.Write(mBuffer)

        mBuffer = 0
        mBufferCount = 0

    End Sub

End Class

そして、ビットを読み戻すために

Public Class BitReader

    Private ReadOnly mBinaryReader As BinaryReader

    Private mBuffer As Integer
    Private mBufferCount As Integer

    Public Sub New(binaryReader As BinaryReader)
        mBinaryReader = binaryReader
        mBuffer = -1
    End Sub

    Public Function ReadBit() As Boolean

        If mBuffer = -1 OrElse mBufferCount = 8 Then

            mBuffer = mBinaryReader.ReadInt32()
            mBufferCount = 0

        End If

        Dim toReturn As Boolean = ((mBuffer >> mBufferCount) And 1) = 1

        mBufferCount += 1

        Return toReturn

    End Function

End Class
于 2012-04-11T08:59:03.167 に答える