问题标签 [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.
java - Java NIO2:需要澄清 FileChannel
我正在尝试构建一个 custom FileChannel
,但由于文档不一致,我遇到了不清楚的问题。
该FileChannel.transferFrom(ReadableByteChannel src, long position, long count)
方法的文档说,
如果给定位置大于文件的当前大小,则不传输任何字节。
现在,他们不应该这样说吗?:
“如果
position + count
大于文件的当前大小,则不传输任何字节。”
我怀疑这可能是文档中的错误的原因是这个。在同一个 API 文档的其他地方,如果文件需要增长,则会明确提及它,例如FileChannel.write(ByteBuffer src, long position)
:
“如果给定的位置大于文件的当前大小,那么文件将被增长以容纳新的字节;”
因此,如果在 的情况下没有提到任何文件增长FileChannel.transferFrom()
,我会觉得文件不应该通过这种方法增长。但问题是,文件不仅可以增长“如果给定位置大于文件的当前大小”,还可以“如果position + count
大于文件的当前大小”。
java - 这是 Java 7 中的一个错误吗?
我不知道在哪里寻求关于 Java API 文档和 Java 代码的澄清和确认,所以我在这里做。
在 API 文档中FileChannel
,我发现要归档position
并归档size
在多个位置的错误。
这里只是一个例子。状态的 API 文档transferFrom(...)
:
“如果给定位置大于文件的当前大小,则不传输任何字节。”
我确认 OpenJDK 代码也包含此代码...
...在FileChannelImpl.java
与文档一致的文件中。
现在,虽然上面的代码片段和 API 文档看起来相互一致,但我“感觉”上面应该“大于或等于”而不仅仅是“大于”,因为position
它是文件数据的基于 0 的索引,随意读取position == size()
没有数据返回给调用者!(在position == size() - 1
处,至少 1 个字节——文件的最后一个字节——可以返回给调用者。)
以下是同一 API 文档页面中的其他一些类似实例:
position(...)
: "将位置设置为大于文件当前大小的值是合法的,但不会改变文件的大小。" (应该是“大于或等于”。)transferTo(...)
: "如果给定位置大于文件的当前大小,则不传输任何字节。" (应该是“大于或等于”。)read(...)
:“如果给定位置大于文件的当前大小,则不读取任何字节。” (应该是“大于或等于”。)
最后,返回值的文档部分read(...)
甚至无法与文档的其余部分保持一致。这是它所说的:
回报:
读取的字节数,可能为零,如果给定位置大于或等于文件的当前大小,则为 -1
所以,在这个单独的例子中,我确实看到他们提到了正确的事情。
总的来说,我不知道该怎么做。如果我今天编写与此文档匹配的代码,那么 Java 中的未来错误修复(代码或文档)将使我的代码出现错误,也需要我的修复。如果我今天自己按照今天的情况做正确的事情,那么我的代码一开始就会出错!
java - 用 NIO 写一个大文本文件
我为我的应用程序中的离线报告编写了一个大约 1200 (+/- 200) mb 的大型 csv 文件。(一个线程执行这项工作。)数据计数可能在 5000 万左右,因此每 50k 行运行一次查询。查询循环运行直到空提取(对于给定的条件)。要将数据写入文件,而不是使用 Java 流,我尝试了 nio. 我花了大约 12 秒来写一个 50000 行的巨大字符串。使用 BufferedWriter 尝试的相同代码大约需要 18-22 秒。nio 方法代码如下。我想知道这是否是使用 nio 编写大文件的直接方法?我忽略了什么,错过了什么?任何其他方式,优化和代码改进都是受欢迎的。
java - 缓冲区下溢异常 Java
我正在将值写入文件。
值写入正确。在另一个应用程序中,我可以毫无例外地读取文件。
但是在我的新应用程序中,我Bufferunderflowexception
在尝试读取文件时得到了一个。
bufferunderflowexception
指的是:
这是我读取文件的代码:
java - 我无法内存映射大文件。地图失败。内存不足错误
这是我的代码:
以下是错误:
我正在尝试在 32 位系统上映射 1.5GB 的文件。
我认为nio应该解决这个问题。难道我做错了什么?
问候。
java - 使用 Java 7 AsynchronousFileChannel 附加到文件
我正在尝试AsynchronousFileChannel
JAVA 7 API 以异步方式写入文件,但是我找不到附加到文件的简单方法。
API 描述指出AsynchronousFileChannel
不维护文件位置,您必须指定文件位置。这意味着您必须维护一个全局文件位置值。此外,这个全局状态应该是原子的,以便您正确递增。
有没有更好的方法来使用 进行更新AsynchronousFileChannel
?
另外,有人可以解释一下 API 中 Attachment 对象的用法吗?
javadoc 说: attachment - 附加到 I/O 操作的对象;可以为空
这个附件对象有什么用?
谢谢!
java - 如何使用 transferFrom 在 Java 中连接两个文件
下面是我的代码。我是否正确地注意到 transferFrom 不会修改被转移到的频道的位置?
这不起作用。它只是复制第一个文件。
问候。
android - 在 Android 中移动后无法读取图像和视频
我正在使用此功能将一些图像和视频移动到自定义文件夹:
文件被正确移动,src 文件被很好地删除。问题是,当我尝试使用任何图库打开图像或视频时,它显示为黑色或无法播放视频。所以我检查了文件管理器,发现文件的权限是错误的。你有什么建议吗?
谢谢。
java - 如果源目标相同,Java中的fileoutputstream会生成零字节?
我们使用类似的代码在 Java 中使用文件复制:
问题是有时source
并且dest
可以指向同一个文件,在这种情况下,以下语句outputChannel = new FileOutputStream(dest).getChannel();
会导致源截断为 0 字节,即使源是 400 kb,因为我认为它正在打开一个用于写入的流相同的手柄。那么有什么方法可以对抗呢?
我应该在我的代码中添加一些内容吗
上面的方法有用吗?或者有没有更好的方法来处理这个?
谢谢
java - 获取错误的 FileChannel 大小
我正在尝试获取包含在assets
. 我正在使用a FileChannel
,因为我需要FileChannel
稍后。该文件myfile.txt
包含 7 个字节。
这是我的代码:
输出是:
为什么方法返回的大小FileChannel.size()
错误?
谢谢你的帮助