如何使用java中的线程读取和写入文件?

2024-01-25

我正在编写一个应用程序,需要从单个文件中读取块,每个块大约为 512 字节。我还需要同时写入块。

我的想法之一是BlockReader implements Runnable and BlockWriter implements Runnable and BlockManager管理读者和作者。

我在发现的大多数示例中看到的问题是锁定问题和潜在的死锁情况。有什么想法如何实现这一点?


我会推荐这本书java并发实践 https://rads.stackoverflow.com/amzn/click/com/B000RH0EPC,在本例中为第 5.3 节(生产者-消费者模式)。

您的解决方案可能类似于:

BlockingQueue<Data> queue = 
    new  LinkedBlockingQueue<Data>(MAX_BLOCKS_IN_QUEUE_UNTIL_BLOCK );

for (int i=0; i < MAX_DATA_PRODUCERS; i++ ) {
   new Thread( new DataProducer( queue ) ).start();
}

new Thread(DataWriter( queue )).start

显然 DataProducer 和 DataWriter 是可运行的。

 class DataProducer implements Runnable {
    ...
    queue.put(data); // blocks if MAX_BLOCKS_IN_QUEUE_UNTIL_BLOCK 
                     // are waiting to be written
                     // This prevents an OutOfMemoryException
    ...
 }

 class DataConsumer implements Runnable {
   ...
   try {
       while(true) {
           writeData(queue.take()); // blocks until there is a block of data
       }
   } catch (InteruptedException e) {
       Thread.currentThread().interrupt();
   }
   ...
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用java中的线程读取和写入文件? 的相关文章

随机推荐

  • 使用 javascript 库跟踪用户活动 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以跟踪用户在网页上的每个操作并创建日志 这个想法是通过 AJAX 将用户操作日志传输到服务器并保
  • Maven WAR 依赖项 - 无法解析包?

    我有战争依赖 性
  • 辞去 ScrollView Touch 上的第一响应者职务

    如何在 ScrollView 触摸事件上隐藏键盘 场景是这样的 gt 视图 gt 滚动视图 gt 文本字段 我想在触摸滚动视图时隐藏键盘 我尝试覆盖滚动视图的类 但仍然无法做到 这样做会有所帮助 interface MyClass
  • 纯分裂的熵计算为 NaN

    我编写了一个函数来计算向量的熵 其中每个元素代表一个类的元素数量 function x Entropy a t sum a t repmat t 1 size a 2 x sum a t log2 a t end e g a 4 0 the
  • 如何在 jsonp ajax 调用中使用 type: "POST"

    我正在使用 JQuery ajax jsonp 我有下面jQuery 代码 ajax type GET url Login aspx Send the login info to this page data str dataType js
  • .erb 、 .rhtml 和 .html.erb 之间有什么区别?

    erb rhtml 和 html erb 之间有什么区别 真的没什么 这只是 Rails 1 和 Rails 2 之间理念的改变 在 Rails 2 之前 有 file rhtml file rxml 和 file rjs 在 Rails
  • 如何生成彼此不相交的正方形(随机定位、大小相等、随机旋转)?

    我一直致力于在 1x1 网格上生成一层随机旋转并放置的正方形 我已经能够生成在网格上随机放置和旋转的单个正方形 但我不确定如何改进代码以生成更多彼此不相交的随机正方形 当前代码如下所示 我的一个随机正方形的示例 https i stack
  • 如何正确重写克隆方法?

    我需要在我的一个没有超类的对象中实现深度克隆 处理检查的最佳方式是什么CloneNotSupportedException由超类抛出 即Object 一位同事建议我按以下方式处理 Override public MyObject clone
  • 通过 Groovy XML 解析器使用字符串作为代码

    我是 groovy 的新手 我希望这是一个简单的问题可以解决 我正在读取 xml 文档 然后我可以访问如下数据 def root new XmlParser parseText xmlString println root foo bar
  • 如何禁用 Google 跟踪代码管理器控制台日志记录

    将 Google 跟踪代码管理器添加到项目后 我在控制台中看到了很多日志条目 有办法禁用它吗 控制台日志充满了噪音 GoogleTagManager info Processing logged event vs with paramete
  • Node.js ENOENT 读取 PDF 文件

    我需要阅读 pdf 文件并使用pdf text extract 它在我的本地主机上完美运行 但是当我尝试在服务器上运行该程序时 出现以下错误 spawn called 0 pdftotext 1 layout enc UTF 8 tmp t
  • Keychain 中存储的字符串有长度限制吗?

    我想在iOS上将一些用户信息作为字符串存储在Keychain中 那么Keychain中的字符串有长度限制吗 Thanks 我组装了一个 iOS 应用程序 可以使用以下命令进行二分搜索这个图书馆 https github com kishik
  • twig - 将函数传递到模板中

    目前 我将函数放在一个类中 并将该类的实例传递到模板中 并将所需的函数作为类方法调用 unneededclass blah 我需要像下面这样做 blah 是否可以 更新 2015 年 5 月 14 日 评论者指出我大部分都是错的 如果您确实
  • 如何合并两个UIImage?

    我正在尝试合并两个不同的图像并创建一个新的图像 这就是我想做的方式 我有这张图片 A 这是一张 PNG 图像 我想将其与我从手机中获取的另一张图像 B 合并 以创建如下所示的图像 我需要一个将 A 与 B 合并创建 C 的函数 尺寸必须保留
  • Nuget Pack 不支持程序集版本上的位数

    I need nuget pack生成只有 3 位数字的包版本 我们想对其进行语义版本控制 但是当我在具有AssemblyVersion属性设置为 1 0 0 生成的 nupkg 文件在其元数据 和文件名 中以版本 1 0 0 0 结尾 为
  • 如何查看tomcat的容器日志?

    如何查看tomcat的容器日志 我从 catalina out 日志中收到此错误 SEVERE localhost startStop 1 org apache catalina core StandardContext startInte
  • 在 SQL Server 中,一行的 %%physloc%% 值总是相同吗?

    我一直在探索它的实际用途 physloc 伪列作为行标识符 不幸的是 我一直无法找到官方文档 physloc 我需要知道这个值是否会改变 我做了一些测试 看起来相当静态 即使我创建数据库的备份并在不同的服务器上恢复 physloc 每行保持
  • Kafka - 无法建立与节点-1的连接

    我正在尝试使用 apache flink 流处理 kafka 主题 但我遇到了这个问题 2018 04 10 02 55 59 856 ProducerConfig values acks 1 batch size 16384 bootst
  • 如何在 React 中重定向到外部链接?

    我正在构建一个画廊 您单击图像 它将使用 props 加载到单独的组件中 该图像是一个 URL 取自数组 其中 src 属性通过 CSS 作为背景图像加载 我的挑战是将 src 数据连接到子组件 查看原始问题 https stackover
  • 如何使用java中的线程读取和写入文件?

    我正在编写一个应用程序 需要从单个文件中读取块 每个块大约为 512 字节 我还需要同时写入块 我的想法之一是BlockReader implements Runnable and BlockWriter implements Runnab