帶指針的結(jié)構(gòu)體可以通過(guò)定義一個(gè)結(jié)構(gòu)體數(shù)組來(lái)實(shí)現(xiàn)序列化,將指針指向的內(nèi)容放入數(shù)組中,然后將數(shù)組序列化成字節(jié)流,即可實(shí)現(xiàn)序列化。此外,還可以使用指針的地址來(lái)實(shí)現(xiàn)序列化,將指針指向的內(nèi)容序列化成字節(jié)流,然后將指針的地址序列化成字節(jié)流,即可實(shí)現(xiàn)序列化。
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站建設(shè)、滑縣網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開(kāi)發(fā)、滑縣網(wǎng)絡(luò)營(yíng)銷、滑縣企業(yè)策劃、滑縣品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供滑縣建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.rwnh.cn
序列化發(fā)出然后反序列化
序列化成文本就行,Json和Xml都是可以的
如果是Vb.net與C++交換數(shù)據(jù)的話,百度都能直接搜到的
我不給你代碼了,我才編了SOCKET的,告訴你原理吧(我的編程經(jīng)驗(yàn)而已)
SOCKET傳輸文件和接受是有大小限制的,默認(rèn)是81**來(lái)則也就是8K多,你可以改小,但改大我沒(méi)試過(guò),然后你必須把文件分成若干份,然后傳過(guò)去,然后在接收端組合起來(lái),同時(shí)接收端的接受大小要和發(fā)送大小統(tǒng)一。
至于你說(shuō)的文件名,文件名不屬于文件數(shù)據(jù)中的一部分,它不參與數(shù)據(jù)傳輸?shù)?,你只能在接收端重新改名字?/p>
同時(shí)為什么要用上面的方法傳呢,因?yàn)閂B.NET中的SOCKET有很多問(wèn)題,我就為此煩過(guò),因?yàn)橐獊G包(理論上TCP不存在),或者粘包,或者斷包,也就是你在接收端獲取文件時(shí)數(shù)據(jù)是要出錯(cuò)的,比如你定長(zhǎng)3000B,結(jié)果接收端可能先收到2000B,當(dāng)接受端接受后,處理會(huì)出錯(cuò)的。
所以SOCKET的標(biāo)準(zhǔn)發(fā)送方法是建立定長(zhǎng)的結(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,如果接受到的包沒(méi)有這么大(比如收到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,或者包里包含總長(zhǎng)度,檢查到序號(hào)為-1時(shí)表示完畢,或者達(dá)到總長(zhǎng)度后表示完畢)再組合,因?yàn)檫@樣會(huì)浪費(fèi)電腦內(nèi)存,最好的方法是一邊接受數(shù)據(jù),一邊寫入到文件中(收到第一個(gè)包時(shí)就建立文件,以后每個(gè)包的數(shù)據(jù)都往里面寫)。
回答你的問(wèn)題:
1、經(jīng)過(guò)上面的傳輸后,文件是不變化的,MD5檢查都是正常的,不用擔(dān)心文件大小有變化(如果有變化,那就是代碼沒(méi)編對(duì))
2,、文件名問(wèn)題,我前面提到了,文件名是不參與傳輸?shù)模粚儆跀?shù)據(jù)中的一部分,比如同一個(gè)文件,不管你怎么改名字MD5是不變的。你只能通過(guò)把文件名想辦法傳給對(duì)方(比如我上面說(shuō)的結(jié)構(gòu)體方法),讓對(duì)方寫入文件時(shí)使用。
3,代碼:
還是給你找找吧,等等
不行,我的都很大,很長(zhǎng),你還是在網(wǎng)上找吧,有很多例子,我也是網(wǎng)上學(xué)的。
反序列化
package main
import (
"encoding/json"
"fmt"
)
type Datapoints struct {
Average ? int ? ?`json:"average"`
Timestamp int64 ?`json:"timestamp"`
Unit ? ? ?string `json:"unit"`
}
type AutoGenerated struct {
Datapoints []Datapoints `json:"datapoints"`
MetricName string ? ? ? `json:"metric_name"`
}
func main() {
var data = `{"datapoints":[{"average":105,"timestamp":1634087580000,"unit":"piece"}],"metric_name":"m1_cps"}`
fmt.Println(data)
var stu02 AutoGenerated
json.Unmarshal([]byte(data), stu02)
fmt.Printf("%#v", stu02)
//?main.AutoGenerated{Datapoints:[]main.Datapoints{main.Datapoints{Average:105, Timestamp:1634087580000, Unit:"piece"}}, MetricName:"m1_cps"}?
}
序列化
package main
import (
"encoding/json"
"fmt"
)
type Datapoints struct {
Average ? int ? ?`json:"average"`
Timestamp int64 ?`json:"timestamp"`
Unit ? ? ?string `json:"unit"`
}
type AutoGenerated struct {
Datapoints []Datapoints `json:"datapoints"`
MetricName string ? ? ? `json:"metric_name"`
}
func main() {
var data = Datapoints{Average: 102, Timestamp: 1634087580000, Unit: "piece"}
var data2 = AutoGenerated{Datapoints: []Datapoints{data}, MetricName: "m1_cps"}
json_str02, _ := json.Marshal(data2)
fmt.Printf("%#v", string(json_str02))
//?"{\"datapoints\":[{\"average\":102,\"timestamp\":1634087580000,\"unit\":\"piece\"}],\"metric_name\":\"m1_cps\"}"
}
標(biāo)題名稱:結(jié)構(gòu)體序列化vb.net 結(jié)構(gòu)體序列化和反序列化
標(biāo)題網(wǎng)址:http://www.rwnh.cn/article6/doshsig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、搜索引擎優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、微信公眾號(hào)、面包屑導(dǎo)航、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)