原数据( json ):{"id":1010,"na":"zhangsan"}
转成 byte:[xxx xx xxx xx xx ...]
现在想直接通过 http 的方式将 byte send 出去,好像不行啊? 用 golang 和 node.js 分别试了下,最后 send 出去的文件打开之后就直接变成了原 json 串了
付代码:
go
s := `{"id":1010,"na":"zhangsan"}`
data := []byte(s)
w.Write(data)
node
let b = new Buffer(`{"id":1010,"na":"zhangsan"}`)
response.send(b)
1
deepdark 2019-05-07 12:44:33 +08:00 via Android
从你的表述中已经成功实现了,因为已经作为文件打开了。所以你的目的到底是啥,以及为什么要把 json 转成 byte 再返回?
|
2
binux 2019-05-07 12:45:56 +08:00
作为人类,我都搞不清楚你想要干什么。你还指望机器能搞清楚?
|
3
imherer OP |
4
hearfish 2019-05-07 12:54:04 +08:00
Content-Type: application/octet-stream
|
5
3dwelcome 2019-05-07 12:55:14 +08:00 via Android
protobuf 没 http 头部消息,要完全去掉感觉有点难度。
单纯发 http 的二进制答复应该是可以的,图片都是二进制数据流。 |
7
imherer OP @3dwelcome 嗯。好像 http 默认把二进制解析了
msg := &test.Msg{ id: 1, na: "zhangsan" } data, _ := proto.Marshal(msg) w.Write(data) 最后客户端收到的结果是:{"id":1010,"na":"zhangsan"} |
8
hearfish 2019-05-07 13:09:51 +08:00
@imherer 你例子发的不就是 json 串么,string 转 bytes 但是内容没变啊。。发一个 protobuf 试试看
|
9
choury 2019-05-07 13:12:17 +08:00 via Android
你打印的时候用 byte 打印就是 byte 了
|
10
nfroot 2019-05-07 18:29:55 +08:00 via Android
楼主是想把字符都转为 16 进制,对吧
|
11
imherer OP |
12
iceheart 2019-05-07 19:54:26 +08:00 via Android
你想要的是 gzip ?
|
14
nfroot 2019-05-07 21:25:19 +08:00
@imherer 楼主,问问题的时候想的是什么问的就是什么,别自己胡乱创造名词又不说出自己想要的内容,你看看楼都歪成什么样了。
开 gzip 就行了,它就会压缩了,传输的时候会压缩!!!!但是你要可读性降低,那就找一种 js 和你后端匹配的压缩算法,每次两边读写的时候都压缩和解压, 你再发一个主题,你直接就说你的后端语言是什么,传输过程中要压缩内容,前端用户看到的是压缩后的最好是二进制那种,一定要说清楚你会不会写代码,否则白搭,如果你不会写代码,也是白搭。 |
15
KuroNekoFan 2019-05-07 23:30:32 +08:00 via iPhone
|
16
yxn1910 2019-05-08 09:48:22 +08:00
你应该是没有序列化再返回,上面的写法是直接返回 json 字符串。
如果是用 Protobuf 需要把 Protobuf 对象先序列化再返回, 譬如 PHP 的官方库是 $protobufObject->serializeToString() Golang 中是 proto.Marshal(protobufObject) Node 中是 protobufObject.serializeBinary(); |