- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在考虑更改 this question进入我的情况。然后我决定我的情况需要自己的问题并希望得到答案。在调用 FileChannel.truncate()
减小文件大小后,我调用 FileChannel.size()
,关闭 FileChannel
然后调用File.length()
。文件存在于整个操作过程中。 FileChannel.size()
总是准确的。在极少数情况下,File.length()
会在 truncate()
之前返回文件的大小。
这是显示情况的代码。
public static void truncate(File file, long size) throws IOException
{
FileChannel channel;
Path path;
long channelSize, fileLengthOpen, fileLengthClosed;
path = file.toPath();
channel = FileChannel.open(path, StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.CREATE);
try
{
channel.truncate(size);
channelSize = channel.size();
fileLengthOpen = file.length();
}
finally
{
channel.close();
}
fileLengthClosed = file.length();
if ((channelSize != size) || (fileLengthOpen != size) || (fileLengthClosed != size))
throw new IOException("The channel size or file length does not match the truncate size. Channel: " + channelSize + " - Open File: " + fileLengthOpen + " - Closed File: " + fileLengthClosed + " - Truncate: " + size);
}
在极少数情况下,代码会抛出 IOException
。 channelSize
== size
和 fileLengthOpen
== size
但是 fileLengthClosed
!= 尺寸
。
为什么 fileLengthClosed
!= size
?如何确保 File.length()
匹配 FileChannel.size()
?只要不强制刷新文件的内容,刷新文件的元数据就可以了。刷新文件内容会导致不必要的文件 I/O。
告诉我使用 channelSize
或 fileLengthOpen
或忽略问题的答案将不会被接受。我有另一个使用 File.length()
来确定文件长度的类文件。将 channelSize
或 fileLengthOpen
传递给其他类需要将值向上传递到堆栈几帧,然后返回几帧。如果您建议我使用 Files.size()
来解决问题,请解释原因。
我不确定这是否重要。我在 Linux 上运行 Java 10。 (是的,我知道 Java 10 已经过时了,但我一直坚持使用它,直到我可以实现升级到 Java 11 的必要功能。)
编辑:过去,文件的多线程更新引起了问题。为此,我创建了一种文件锁定机制,使得整个进程中只有1个线程可以独占对一个文件进行操作(或者多个线程可以读取该文件)。此外,传递给我的 truncate()
的 File
对象是由调用线程创建的,并且仅由该线程使用。我可以保证进程中没有其他线程可以对磁盘上的文件或 File
对象进行操作。
编辑:我更改了代码以在 channel.close()
之前和之后调用 Files.size()
。 channel.size()
、File.length()
和 Files.size()
报告正确的大小,而 channel
是开放的。在 channel.close()
之后,File.length()
和 Files.size()
在极少数情况下是原始的较长文件长度而不是截短的较短长度。
最佳答案
自旋等待 fileLengthClosed
正确。这是代码。
while (true)
{
fileLengthClosed = file.length();
if (fileLengthClosed == size)
break;
Thread.sleep(1);
}
我已经运行这段代码 3 周了,没有出现任何问题。一个问题是,如果文件长度被修改或 file.length()
永远不会更新,则没有超时代码。
这个解决方案并没有回答为什么 File.length()
首先是不正确的。此外,调用 Thread.sleep()
表明我真的在等待其他操作完成,我真的应该强制该操作完成或阻止该操作。我不确定如何强制或阻止该操作。
关于Java FileChannel.size() 与 File.length() - 在 FileChannel.truncate() 之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55560520/
ValueError Traceback (most recent call last) in 23 out
在 CSS 中,我从来没有真正理解为什么会发生这种情况,但每当我为某物分配 margin-top:50% 时,该元素就会被推到页面底部,几乎完全消失这一页。我假设 50% 时,该元素将位于页面的中间位
我正在尝试在 pyTorch 中训练我的第一个神经网络(我不是程序员,只是一个困惑的化学家)。 网络本身应该采用 1064 个元素向量并用 float 对它们进行评级。 到目前为止,我遇到了各种各样的
我有一个简单的问题。如何在 3 个维度上移动线性阵列?这似乎太有效了,但在 X 和 Y 轴上我遇到了索引问题。我想这样做的原因很简单。我想创建一个带有 block 缓冲区的体积地形,所以我只需要在视口
我正在尝试运行我购买的一本关于 Pytorch 强化学习的书中的代码。 代码应该按照本书工作,但对我来说,模型没有收敛,奖励仍然为负。它还会收到以下用户警告: /home/user/.local/li
我目前正在使用 this repo使用我自己的数据集执行 NLP 并了解有关 CNN 的更多信息,但我一直遇到有关形状不匹配的错误: ValueError: Target size (torch.Si
UIScrollView 以编程方式设置,请不要使用 .xib 文件发布答案。 我的 UIScrollView 位于我的模型类中,所以我希望代码能够轻松导入到另一个项目中,例如。适用于 iPad 或旋
我在我的 Ruby on Rails 应用程序(版本 4.3.1)中使用 Bootstrap gem。我最近发现了响应式字体大小功能 (rfs)。根据 Bootstrap 文档,它刚刚在 4.3 版中
这个问题不太可能帮助任何 future 的访客;它仅与一个小地理区域、一个特定时刻或一个非常狭窄的情况相关,而这些情况通常不适用于互联网的全局受众。如需帮助使这个问题更广泛地适用,visit the
size 之间的语义区别是什么?和 sizeIs ?例如, List(1,2,3).sizeIs > 1 // true List(1,2,3).size > 1 // true Luis 在 c
我想从 div 中删除一些元素属性。我的 div 是自动生成的。我想遍历每个 div 和子 div,并想删除所有 font-size (font-size: Xpx)和 size里面font tag
super ,对 Python 和一般编程 super 新手。我有一个问题应该很简单。我正在使用一本使用 Python 3.1 版的 python 初学者编程书。 我目前正在写书中的一个程序,我正在学
我无法从 NativeBase 更改缩略图的默认大小。我可以显示默认圆圈,即小圆圈和大圆圈,但我想显示比默认大小更大的圆圈。这是我的缩略图代码: Prop 大小不起作用,缩略图仍然很小。 我的 Na
我是pytorch的新手。在玩张量时,我观察到了两种类型的张量- tensor(58) tensor([57.3895]) 我打印了它们的形状,输出分别是 - torch.Size([]) torch
这是我的 docker images 命令的输出: $ docker images REPOSITORY TAG IMAGE ID CREATED
来自 PriorityQueue 的代码: private E removeAt(int i) { assert i >= 0 && i < size; modCount++;
首先,在我的系统上保留以下内容:sizeof(char) == 1 和 sizeof(char*) == 4。很简单,当我们计算下面类的总大小时: class SampleClass { char c
我正在编写一个游戏来查找 2 个图像之间的差异。我创建了 CCSprite 的子类 Spot。首先我尝试创建小图像并根据其位置添加自身,但后来我发现位置很难确定,因为很难避免 1 或 2 个像素的偏移
我有一个 Tumblr Site每个帖子的宽度由标签决定。 如果一篇文章被标记为 #width200,CSS 类 .width200 被分配。 问题是,虽然帖子的宽度不同,但它们都使用主题运算符加载相
这个问题在这里已经有了答案: What is the ideal growth rate for a dynamically allocated array? (12 个答案) 关闭 8 年前。 我
我是一名优秀的程序员,十分优秀!