gpt4 book ai didi

java - 如何从 ByteBuffer 中获取连续的切片?

转载 作者:搜寻专家 更新时间:2023-10-31 19:30:46 24 4
gpt4 key购买 nike

我有一个 ByteBuffer包含一个大文件 (100 MB):

    java.nio.ByteBuffer byteBuffer = ByteBuffer.wrap(multipartFile.getBytes());
writeChannel.write(byteBuffer);
writeChannel.closeFinally();

我一次只能合法地向 writeChannel 写入 1 MB。

如何将 ByteBuffer 的内容切片并一次只将 1 MB 的切片写入 writeChannel

最佳答案

您可以使用 ByteBuffer#slice()获取基本 ByteBuffer 实例的副本 View ,然后将位置移动以显示内容的滑动窗口。或者,如果您不需要将它暴露给任何其他消费者,您可以对您的基本缓冲区执行相同的操作。

您可以通过 the single-argument Buffer#position(int) method 更改内容 View 的起始位置,并通过 Buffer#limit(int) 更改 View 的结束位置.只要您注意不要将 View 推到底层缓冲区的限制之外,您就可以执行以下操作:

final ByteBuffer view = base.slice();
for (int start = base.position(), end = base.limit(), stride = 1000000;
start != end;
start = view.limit())
consume(view.position(start)
.limit(start + Math.min(end - start, stride)));

我没有测试它,但它看起来是正确的。可以重写以避免位置的初始设置,这在这里不是绝对必要的,但它会导致一些重复或第一次通过时更尴尬的特殊情况处理。

我这样保留它是为了保留基本的 for 循环 结构。

关于java - 如何从 ByteBuffer 中获取连续的切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6576596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com