当前位置: 代码迷 >> VB Dotnet >> 字符串转Byte分段还原有关问题
  详细解决方案

字符串转Byte分段还原有关问题

热度:135   发布时间:2016-04-25 02:19:19.0
【求助】字符串转Byte分段还原问题
最近在做Socket开发,所以长字符串发送需要分段。

一直纠结一个问题,一段长字符串,转换为Byte数组,每1000分一段,然后再重新将这些分好的段组合还原成字符串

现在遇到分段后无法还原字符串,还原出来一直是空白的,但是分段数据可以还原成字符串,一旦组合在一起就还原不出来了


Imports System.Text


Public Class Form1

    Dim Allstr() As Byte

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim bytes() As Byte = Encoding.UTF8.GetBytes(RichTextBox1.Text)


        ReDim Allstr(0)
        Dim SSize As Long '分包次数
        '分包
        SSize = Fix(UBound(bytes) / 1000) 'ssize=3

        If (UBound(bytes) / 1000) - SSize > 0 Then SSize = SSize + 1 '即便0.x不满1也进1

        Dim i As Long : Dim G As Integer : Dim Temp(999) As Byte : Dim Y As Long
        For i = 0 To SSize - 1  '从第一包到最后一包

            If i = SSize - 1 Then
                G = UBound(bytes) - (i * 1000)
            Else
                G = 999
            End If


            If i = 0 Then Y = 0 Else Y = i * 1000 + 1 '分段起始点

            System.Array.ConstrainedCopy(bytes, Y, Temp, 0, G)

            If G <> 1000 Then
                Dim P(G) As Byte
                System.Array.ConstrainedCopy(Temp, 0, P, 0, G)
                Sends(P) '发送
            Else
                Sends(Temp) '发送
            End If

            ReDim Temp(1000)

        Next i


        '↓输出总是空白,一个字符串都没有
        '-------------------------------------------
        MsgBox(Encoding.UTF8.GetString(Allstr))
        '-------------------------------------------

    End Sub

    '接受分段发来的包并组合
    Sub Sends(B As Byte())
        Allstr = ByteIAndByteIIToByteIII(Allstr, B)
    End Sub

    Public Function ByteIAndByteIIToByteIII(ByVal data1() As Byte, ByVal data2() As Byte) As Byte()
        Dim temp(data1.Length + data2.Length) As Byte
        data1.CopyTo(temp, 0)
        data2.CopyTo(temp, data1.Length)
        Return temp
    End Function


End Class



求指点~看看哪里错了,全部代码就这些了
------解决方案--------------------
用Encoder.GetBytes和Encoder.GetString来编码/还原。
  相关解决方案