這個(gè)跟反序列化毫無關(guān)系。
創(chuàng)新互聯(lián)建站是一家專業(yè)提供和政企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為和政眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
分隔字符串就用 Split(),沒什么難度。
Module Module1
Sub Main()
Dim MYAAA As New AAA
MYAAA.A1 = "BAIGEZY"
MYAAA.A2 = "ASDFASDF"
MYAAA.A3 = "EMC"
Dim serialize As XmlSerializer = New XmlSerializer(GetType(AAA))
serialize.Serialize(Console.Out, MYAAA)
Console.ReadLine()
End Sub
End Module
'類不要套在Module中
Public Class AAA
Public A1 As String
Public A2 As String
Public A3 As String
Public Sub New()
End Sub
End Class
因?yàn)樗麤]有從serialable繼承。
任何東西都可以序列化,沒什么保護(hù)或者技術(shù)困難的問題。
Function ByteToBin(m As Byte) As String ' 將字節(jié)型數(shù)據(jù)轉(zhuǎn)換成八位二進(jìn)制字符串
Dim c$
c$ = ""
Do While m 0
r = m Mod 2
m = m \ 2
c$ = r c$
Loop
c$ = Right("00000000" c$, 8)
ByteToBin = c$
End Function
Function Reverse(m As String) As String ' 將八位二進(jìn)制字符串顛倒順序
Dim i%, x$
x = ""
For i = 1 To 8
x = Mid(m, i, 1) x
Next i
Reverse = x
End Function
Function BinToByte(m As String) As Byte ' 將八位二進(jìn)制串轉(zhuǎn)換成十進(jìn)制
Dim x As String * 1, y%, z%
z = 0
For i = 1 To 8
x = Mid(m, i, 1)
y = x * 2 ^ (8 - i)
z = z + y
Next i
BinToByte = z
End Function
Private Sub Command1_Click()
Dim x As Byte, i%, fname$
fname = InputBox("請(qǐng)輸入要加密的文件名!注意加上路徑名:")
If Dir(fname) = "" Then
MsgBox "文件不存在!"
Exit Sub
End If
Open fname For Binary As #1 ' 以二進(jìn)制訪問模式打開待加密文件
For i = 1 To LOF(1) ' LOF函數(shù)是求文件長度的內(nèi)部函數(shù)
Get #1, i, x ' 取出第i個(gè)字節(jié)
x = BinToByte(Reverse(ByteToBin(x))) ' 這里調(diào)用了三個(gè)自定義函數(shù)
Put #1, i, x ' 將加密后的這個(gè)字節(jié)寫回到文件原位置
Next i
Close
MsgBox "完成!"
End Sub
退出:Unload Me
網(wǎng)上幫你找的,如果不符合你的要求,你可以再去網(wǎng)上在搜搜,有很多代碼的。
我不給你代碼了,我才編了SOCKET的,告訴你原理吧(我的編程經(jīng)驗(yàn)而已)
SOCKET傳輸文件和接受是有大小限制的,默認(rèn)是81**來則也就是8K多,你可以改小,但改大我沒試過,然后你必須把文件分成若干份,然后傳過去,然后在接收端組合起來,同時(shí)接收端的接受大小要和發(fā)送大小統(tǒng)一。
至于你說的文件名,文件名不屬于文件數(shù)據(jù)中的一部分,它不參與數(shù)據(jù)傳輸?shù)?,你只能在接收端重新改名字?/p>
同時(shí)為什么要用上面的方法傳呢,因?yàn)閂B.NET中的SOCKET有很多問題,我就為此煩過,因?yàn)橐獊G包(理論上TCP不存在),或者粘包,或者斷包,也就是你在接收端獲取文件時(shí)數(shù)據(jù)是要出錯(cuò)的,比如你定長3000B,結(jié)果接收端可能先收到2000B,當(dāng)接受端接受后,處理會(huì)出錯(cuò)的。
所以SOCKET的標(biāo)準(zhǔn)發(fā)送方法是建立定長的結(jié)構(gòu)體(結(jié)構(gòu)體必須定義為可序列化結(jié)構(gòu)體),最好結(jié)構(gòu)體里面至少包含有 1,文件名,2,本包序號(hào),3,本包數(shù)據(jù),比如每個(gè)包大小3040B,文件名占20,序號(hào)占20,數(shù)據(jù)占3000,然后發(fā)送出去,接收端每次固定接受3040B,如果接受到的包沒有這么大(比如收到2000),那么繼續(xù)接受(1040),直到達(dá)到3040后組合成一個(gè)包,在把包分解成結(jié)構(gòu)體,相同的文件名為一個(gè)文件,再按照序號(hào)按次組合其中的數(shù)據(jù),這就完成了傳輸。這樣的方法還可以同時(shí)傳送多個(gè)文件,因?yàn)榻Y(jié)構(gòu)體里面包含了文件名和序列號(hào),不會(huì)錯(cuò)亂,如果是大文件,請(qǐng)不要接收完畢后(最后一個(gè)包的序號(hào)可以為-1,或者包里包含總長度,檢查到序號(hào)為-1時(shí)表示完畢,或者達(dá)到總長度后表示完畢)再組合,因?yàn)檫@樣會(huì)浪費(fèi)電腦內(nèi)存,最好的方法是一邊接受數(shù)據(jù),一邊寫入到文件中(收到第一個(gè)包時(shí)就建立文件,以后每個(gè)包的數(shù)據(jù)都往里面寫)。
回答你的問題:
1、經(jīng)過上面的傳輸后,文件是不變化的,MD5檢查都是正常的,不用擔(dān)心文件大小有變化(如果有變化,那就是代碼沒編對(duì))
2,、文件名問題,我前面提到了,文件名是不參與傳輸?shù)?,它不屬于?shù)據(jù)中的一部分,比如同一個(gè)文件,不管你怎么改名字MD5是不變的。你只能通過把文件名想辦法傳給對(duì)方(比如我上面說的結(jié)構(gòu)體方法),讓對(duì)方寫入文件時(shí)使用。
3,代碼:
還是給你找找吧,等等
不行,我的都很大,很長,你還是在網(wǎng)上找吧,有很多例子,我也是網(wǎng)上學(xué)的。