在 Java 中“网络带宽优化”通常不是单一技术,而是减少传输量 + 提高传输效率 + 控制并发的综合问题。下面按常见场景给你一个系统性的优化思路。
适合文本、JSON、日志、RPC 等场景。
常用方式
示例(GZIP)
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try (GZIPOutputStream gzip = new GZIPOutputStream(bos)) {
gzip.write(data);
}
byte[] compressed = bos.toByteArray();
✅ HTTP 中可直接用:
Accept-Encoding: gzip
Content-Encoding: gzip
避免:
ObjectOutputStream(慢、体积大)推荐:
示例(Protobuf)
byte[] bytes = user.toByteArray();
通常比 JSON 小 30%~70%
❌ 不好:
for (Item item : items) {
send(item);
}
✅ 好:
send(batch(items));
避免频繁 TCP 握手和 TLS 握手。
传统 BIO:
Netty:
ChannelFuture f = bootstrap.connect(host, port).sync();
FileRegion region = new DefaultFileRegion(fileChannel, 0, size);
channel.writeAndFlush(region);
适合:
socket.setTcpNoDelay(true); // 禁用 Nagle
socket.setSendBufferSize(64 * 1024);
socket.setReceiveBufferSize(64 * 1024);
系统层:
tcp_window_scalingtcp_rmem / tcp_wmemRateLimiter limiter = RateLimiter.create(10.0); // 10 QPS
limiter.acquire();
| 场景 | 优化重点 |
|---|---|
| HTTP API | GZIP + Protobuf + HTTP/2 |
| 微服务 | 批量 + 高效序列化 |
| 文件传输 | 零拷贝 + 压缩 |
| 实时通信 | WebSocket + 增量 |
| 大数据上报 | 批量 + 压缩 + 限流 |
netstat / sstcpdumpjstack / arthas如果你能说下:
我可以直接给你针对性的优化方案和代码示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。