问题标签 [filechannel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
6732 浏览

java - Who is better in performance filechannel or RandomAccessFile for reading and writing?

I recently came across FileChannel, I am a big fan of RandomAccessFile. But I am wondering why would I pick FileChannel over RandomAccessFile for reading from a file and writing that content to another.

Is there any specific performance reason? I dont want to use locking of FileChannel for any purpose as I believe that could be one of the reasons why filechannel can be used. I don't want to use BufferReader or anything like that as suggested in other StackOverflow response.

0 投票
1 回答
4380 浏览

java - RandomAccessFile 与 NIO 通道

我试图理解以下行为。我的旧代码,

O/P - 已删除 - 假

仅当我执行“channel.close();”时 在我删除文件之前。它是否删除文件并返回true。

更新的替换代码,

O/P - 已删除 - 真

但这在应用程序退出之前不会删除文件。如果我使用“fChannel.close()”,它会立即删除它。

几个问题,

  1. 为什么不同的行为,我理解两者都是不同的类型,即 RA 与 Seekable Channel。但不确定,为什么删除应该表现不同。
  2. 在较新的实现中,如果在应用程序退出之前它不删除文件,那么它应该返回 false(即不会删除,直到调用 close)或者然后立即删除。

我不知道我是否遇到了错误或遗漏了什么。任何指针都可以提供帮助。

谢谢

0 投票
1 回答
383 浏览

nio - java nio socketChannel.write() 缺少字节

bBuffer是一个类型的对象,ByteBuffer它来自FileChannel.map()(它是一个图像文件)。当我在客户端收到这个图像文件时,它不是一个完整的图像——大约一半的图像丢失了。所以我通过将一些统计信息打印到控制台来检查写入了多少字节。输出是:

剩下的字节怎么了?似乎缺少 (319923 - 131071) 个字节。

有时written等于bBuffer.capacity(),它似乎与文件大小或缓冲区容量无关。

0 投票
1 回答
1397 浏览

java - 将一定数量的字节读入 ByteBuffer

我有一个 10MB 的二进制文件。我需要以不同大小的块(例如 300、273 字节)读取它。对于阅读,我使用FileChanneland ByteBuffer。现在,对于每次阅读迭代,我都会分配新ByteBuffer的大小,我需要阅读。

是否可以只为 ByteBuffer 分配一次(比如说 200 KB)并读入它(300、273 字节等)?我不会一次读取超过 200KB 的内容。必须读取整个文件。

UPD

由于内存限制,我无法一次读取整个文件。这就是我分块阅读的原因。效率也很重要(这就是为什么我不想使用我当前的方法进行多次分配)。谢谢

0 投票
1 回答
780 浏览

java - Fork/Join 结合 FileChannel 复制文件

最近我正在使用 Java 7 FORK/JOIN 框架和 FileChannel 来复制文件。这是我的代码(Test.java):

我运行我的代码,如果线程数为 1,则文件被精确复制,但当线程数为 2 时,文件“C:\abc.cdm”为 77KB(78335),但复制后,文件“C:\ temp\abc.cdm" 只是 (39KB)。

我哪里错了,请告诉我??

更新:我的问题已经解决 问题出在 isDone 方法中,一定是:

还要编辑以下代码行:

这只是 FORK/JOIN 用法的练习!

0 投票
2 回答
338 浏览

java - Java FileChannel 比它的内容大

我正在创建一个 fileChannel 来执行内存映射写入。此 fileChannel 的大小为 100 字节。我只写了 80 个字节。因此,当我稍后从该文件中读取时,它会在 and 中添加 5 个“0”。有没有办法设置大小或获取写入文件的大小?

非常感谢!!

0 投票
1 回答
2406 浏览

java - 没有通过 FileInputStream 获取文件?

我正在尝试检查文件位置,以免被覆盖。为此,我必须使用它,FileInputStream因为它有一个position()可以与FileChannel. BufferedReader不保持立场。

我的代码是:

我得到java.io.FileNotFoundException

/doneQuestionDetail.txt:打开失败:ENOENT(没有这样的文件或目录)

这个错误意味着它没有从位置获取文件,因为文件不存在那里,如果我使用BufferedReader

它在这一行中没有给出任何错误,这意味着文件存在并且FileInputStream没有获取文件。

搜索后,我必须先获取位置,然后将其提供给FileInputStream,然后我将代码更改为:

现在我收到一个错误:

java.io.FileNotFoundException:/mnt/sdcard/imotax/File.txt:打开失败:ENOENT(没有这样的文件或目录)

希望得到您的建议。谢谢。

0 投票
1 回答
2352 浏览

android - 对于较大的文件,FileChannel.transferFrom 因内存不足错误而失败

FileChannel.transferFrom(source, 0, source.size()) 在尝试复制大小约为 2GB 的文件时会给出以下 OutOfMemory 异常。我了解由于文件较大而导致的内存问题。我们可以通过循环处理小块文件来解决它吗?

编辑:

我尝试了以下代码:

但它只复制文件的前半部分......

0 投票
1 回答
307 浏览

java - 为什么 FileChannel 的 position() 方法总是返回零?

我的应用程序逐行读取文本文件并记录每行的偏移量,直到文件结束。但是 position() 总是返回 0。我的代码有什么问题?

0 投票
1 回答
701 浏览

java - MappedByteBuffer 抛出 java.nio.BufferOverflowException

我正在学习 java nio,我正在使用 MappedByteBuffer 和 ExecutorService 异步复制文件。我的问题是 MappedByteBuffer.put() 方法抛出 java.nio.BufferOverflowException。但在我的调试中,我没有复制到目标文件的上方位置。这是我用来创建文件的新副本的代码部分:

例外是: