Java NIO ByteBuffer,翻转后写入

2024-03-10

我是 Java ByteBuffers 的新手,想知道翻转后写入 ByteBuffer 的正确方法是什么。

在我的用例中,我将一个输出缓冲区写入套接字:

    outBuffer.flip();
    //Non-blocking SocketChannel
    int bytesWritten = getSocket().write(outBuffer);

此后,必须再次写入输出缓冲区。此外,并非 outBuffer 中的所有字节都已写入套接字。

由于它当前已翻转,如果数据仍在缓冲区中且未写入套接字,如何才能使其再次可写,而不覆盖任何数据?

如果我是对的, outBuffer.position() == bytesWritten 和限制应该是要写入的数据量。

那么使用以下内容来重用输出缓冲区是否正确? :

   int limit = outBuffer.limit()  
   outBuffer.limit(outBuffer.capacity());
   outBuffer.position(limit);

Again从 API 规范:以下循环通过缓冲区 buf 将字节从一个通道复制到另一个通道:

while (in.read(buf) >= 0 || buf.position != 0) {
   buf.flip();
   out.write(buf);
   buf.compact();    // In case of partial write
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java NIO ByteBuffer,翻转后写入 的相关文章

随机推荐

  • 如何在 python nltk 中获取 n-gram 搭配和关联?

    In 本文档 http nltk googlecode com svn trunk doc howto collocations html 有一个例子使用nltk collocations BigramAssocMeasures Bigra
  • 使用公共子字符串连接两个字符串?

    说我有弦 string1 Hello how are you string2 are you doing now 结果应该是这样的 Hello how are you doing now 我正在考虑使用不同的方式re和字符串搜索 最长公共子
  • 从每 n 行复制单元格

    我想从每个人的名字中获取名字这个谷歌电子表格 https docs google com spreadsheets d 1S3AyaWjES1Go NxFYryIDlo0humlvzU4 fbiwNIWwo0 edit usp sharin
  • 使用 Node 的 Google API 批量请求

    我注意到 Google 最近从他们的 Node 客户端删除了批量请求 https github com google google api nodejs client blob 0db674b7d3a04cf65e223f876cf7b3f
  • 使用专用网络从 Google Compute Engine 访问 Google Cloud SQL

    是否可以使用专用网络从 Google Compute Engine 访问 Google Cloud SQL Google Cloud SQL 似乎看到了 Google Compute Engine 实例的公共网络 IP 并且 Web 控制台
  • 在 React JS 中使用颜色控制时的警告

    我将 React JS 与 Babel 和 Webpack 一起使用 一切都与我的其他脚本 甚至使用颜色模块的脚本 一起正常工作 但是 我的脚本之一给了我以下错误 指定的值 不符合要求的格式 这 格式为 rrggbb 其中 rr gg bb
  • 无法更新 Xamarin for Visual Studio

    我最近不得不重新安装我的电脑 我重新安装了VS2015 Community 然后我从 www xamarin com download 安装了 Xamarin 每当我打开 Visual Studio 时都会收到以下通知 尽管当我点击它时什么
  • remove() 方法太慢

    我在读取内存痕迹时遇到问题 我已阅读它并将页面及其参考保存在地图上 地图结构 Map
  • 排序比较计数器

    我有这段代码 可以对填充有随机数的数组进行排序 并计算完成排序所需的数字比较 我正在使用排序方法选择冒泡和合并排序 我有选择和气泡的计数器 但没有合并的计数器 我不知道把它放在哪里 这可能是一个简单的答案 但我就是无法让它发挥作用 Code
  • 使用 Winforms 应用程序部署 SQL Server 数据库

    我创建了一个基于 SQL DB 的 winforms 应用程序 我想将其部署在客户端计算机上 该程序是单用户桌面应用程序 意见于this https stackoverflow com questions 1813241 how to de
  • GitHub 从之前的提交中分叉了一个存储库

    我在 GitHub 上找到了一个存储库 我想分叉 但不是当前版本 我想分叉该存储库 因为它有相当多的提交回来 这可能吗 该存储库尚未标记任何版本 因此我不确定如何执行此操作 显然 我可以复制该提交中的代码 但我更愿意分叉 因为这样我就可以将
  • HBase 上的 Thrift 有性能基准吗?

    我有一个可以将大量数据写入 hbase 的系统 系统是用c 编写的 发现hbase有其他语言的thrift接口 我的问题是 HBase 上的 Thrift 有性能基准吗 与java原生api相比 最劣势是什么 我推荐最近关于这个主题的两篇博
  • PS 脚本正在导出空的 CSV

    我花了很长时间试图理解为什么这个脚本没有按预期工作 这是一个简单的脚本 我尝试在其中导入 CSV 选择我想要的几列 然后导出 CSV 并复制自身 基本上 我们已经存档了数据 由于内存大小限制 我只需要从另一个项目中获取几列 这个脚本非常简单
  • 在 Android Studio 上将模块或项目导入为库

    我想在我的动态壁纸项目中使用 HoloEverywhere HE Preferences AddOn 该项目即将完成 我只需要它从 android 2 3 到 4 4 看起来相同 所以我继续按照指南从 GitHub 获取 HE 在 Demo
  • 水豚无法使用 action_cable

    我正在使用带有操作电缆的 Rails 5 beta 3 集成在开发中运行良好 但是当我尝试通过水豚运行功能测试时 它似乎没有命中通道操作 我正在使用 Portergeist 并将 puma 配置为水豚的服务器 我还使用 es5 shim 和
  • 在 Windows 上调试时 stderr 去了哪里?

    当尝试在 Windows 上调试程序时 我似乎无法找到推送到 stderr 的输出的去向 如何获取 stderr 输出 是否可以更改调试器级别设置 MSVC 9 以将 stderr 重定向到 UI 的某些部分 更新 我还没有研究过TRACE
  • 在 Android 类相机中将自动对焦放在哪里

    我正在尝试使用自动对焦 我不知道在哪里放置自动对焦 有人知道如何实现自动对焦吗 预习班 package com marakana import java io IOException import android content Conte
  • 使用 Auth 获取数据透视表中用户的角色

    我有以下数据库结构 使用数据透视表连接用户和角色表 用户表包含所有信息 例如电子邮件和密码 而角色表定义不同的角色 角色表 1 gt 管理员 2 gt 编码器 3 gt 推销员 4 gt 技术 现在角色被定义为多对多 因为有一些编码器也被分
  • 从哪里可以获得 libpq 源代码?

    我想编写使用 Postgresql 作为 DBMS 的应用程序 要编写客户端应用程序 我需要 libpq 库和头文件吗 如果是的话我会在哪里获得 libpq 库和头文件 Libpq 包含在完整的 PostgreSQL 源代码中 您可以只使用
  • Java NIO ByteBuffer,翻转后写入

    我是 Java ByteBuffers 的新手 想知道翻转后写入 ByteBuffer 的正确方法是什么 在我的用例中 我将一个输出缓冲区写入套接字 outBuffer flip Non blocking SocketChannel int