[英]Dynamically sized Uint8Array when receiving data over TCP network
我已經成功構建了一個簡單的 TCP 服務器,這是我的代碼:
const server = Deno.listen({ port:3000 })
for await (const conn of server) {
let d = new Uint8Array(1024)
await conn.read(d)
console.log(d)
}
這很好用,在某些時候,這不是一個大問題。 但是我不想手動設置 Uint8Array 大小並按從conn.read()
收到的長度對 uint8array 進行切片。
有什么辦法可以解決這個問題嗎?
從conn.read()
接收的動態大小的 Uint8Array
兩種方式:
迭代ReadableStream
:
const server = Deno.listen({ port: 3000 });
for await (const conn of server) {
(async () => {
const byteArr: number[] = [];
for await (const chunk of conn.readable) byteArr.push(...chunk);
const u8Arr = new Uint8Array(byteArr);
})();
}
使用readAll
中的deno.land/std
:
import { readAll } from "https://deno.land/std@0.149.0/streams/conversion.ts";
const server = Deno.listen({ port: 3000 });
for await (const conn of server) {
(async () => {
const u8Arr = await readAll(conn);
})();
}
您可以閱讀Buffer#readFrom
的源代碼以了解readAll
如何在內部進行操作。
請務必閱讀手冊頁HTTP Server APIs (low level) | 手冊 | Deno ,因為它涵蓋了您似乎正在探索/詢問的很多內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.