最近在做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来编码/还原。