You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Deno TCP服务中实现动态大小的Uint8Array接收数据?

解决Deno TCP连接动态读取数据的问题

你可以通过两种方式实现动态获取Uint8Array,无需手动指定缓冲区大小或处理返回长度切片:

方法一:使用Deno.readAll()(推荐,简洁高效)

Deno.readAll()会自动读取连接中的所有可用数据,返回一个适配数据大小的Uint8Array,完全不需要手动管理缓冲区:

const server = Deno.listen({ port: 3000 });

for await (const conn of server) {
  try {
    // 自动读取全部数据,返回动态大小的Uint8Array
    const data = await Deno.readAll(conn);
    console.log(data);
  } finally {
    // 确保连接关闭,避免资源泄漏
    conn.close();
  }
}

方法二:流式拼接数据(适合大文件/分段传输场景)

如果需要处理分段发送的流式数据,可以将连接转为ReadableStream,通过循环读取并拼接数据来构建动态数组:

const server = Deno.listen({ port: 3000 });

for await (const conn of server) {
  let allData = new Uint8Array();
  const reader = conn.readable.getReader();

  try {
    while (true) {
      const { done, value } = await reader.read();
      if (done) break;

      // 扩容并拼接新读取的数据
      const tempBuffer = new Uint8Array(allData.length + value.length);
      tempBuffer.set(allData);
      tempBuffer.set(value, allData.length);
      allData = tempBuffer;
    }
    console.log(allData);
  } finally {
    reader.releaseLock();
    conn.close();
  }
}

注意事项

  • Deno.readAll()会一直等待直到连接关闭,适合一次性传输完整数据的场景。
  • 流式处理方式可以在数据传输过程中逐步处理,避免一次性加载大量数据到内存,适合大体积数据场景。

内容的提问来源于stack exchange,提问作者thebluetropics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:36:11