Java: 将 FileChannel 与 ByteChannel 一起使用时,READ 和 WRITE 是 "ambiguous"?
Java: READ and WRITE are "ambiguous" when using FileChannel with ByteChannel?
我正在学习 Java 通过使用教科书 Java 编程第 9 版的入门课程,Joyce Farrel 着。这些示例和练习是为 Java 9e 编写的,但是,我使用的是 Java SE 14.
我已成功导航 Java API 并找到更新以及有用的解释,说明我在两个版本之间遇到的错误以及更正的最佳方法是什么让示例和练习起作用。
然而,在这种情况下,我真的很难过。我很确定这是由于缺乏经验,但我找不到任何我可以使用 Java API 理解的东西,这让我对如何解决这个问题有了想法。 Google 和 Whosebug 的帖子并没有那么成功,因为我假设人们正在使用更简化的方法或方法。
在相关行中添加注释的代码:
...
Path rafTest = Paths.get("raf.txt");
String addIn = "abc";
byte[] data = addIn.getBytes();
ByteBuffer out = ByteBuffer.wrap(data);
FileChannel fc = null;
try {
fc = (FileChannel)Files.newByteChannel(file, READ, WRITE); // Error READ and Write is ambiguous?
...
} catch (Exception e){
System.out.println("Error message: " + e);
}
...
找到一种方法来弄清楚这里究竟发生了什么的最佳方法是什么?
@Bradley:通过尝试重写我的问题找到了答案。编译器返回 3 个处理 StandardOpenOption 的特定错误。使用它和 Java API,我找到了解决方案。谢谢。
@NomadMaker:首先想到的是我没有为 newByteChannel 正确包含包。第二个选项是论点需要更具体的参考。
答案:newByteChannel(...);需要打开选项参数来引用 StandardOpenOption.READ 和 WRITE。这样:
...newByteChannel(raf, StandardOpenOption.READ, StandardOpenOption.WRITE);
此更改已在 Java SE 11 中实现。该程序现在可以正常工作。
我正在学习 Java 通过使用教科书 Java 编程第 9 版的入门课程,Joyce Farrel 着。这些示例和练习是为 Java 9e 编写的,但是,我使用的是 Java SE 14.
我已成功导航 Java API 并找到更新以及有用的解释,说明我在两个版本之间遇到的错误以及更正的最佳方法是什么让示例和练习起作用。
然而,在这种情况下,我真的很难过。我很确定这是由于缺乏经验,但我找不到任何我可以使用 Java API 理解的东西,这让我对如何解决这个问题有了想法。 Google 和 Whosebug 的帖子并没有那么成功,因为我假设人们正在使用更简化的方法或方法。
在相关行中添加注释的代码:
...
Path rafTest = Paths.get("raf.txt");
String addIn = "abc";
byte[] data = addIn.getBytes();
ByteBuffer out = ByteBuffer.wrap(data);
FileChannel fc = null;
try {
fc = (FileChannel)Files.newByteChannel(file, READ, WRITE); // Error READ and Write is ambiguous?
...
} catch (Exception e){
System.out.println("Error message: " + e);
}
...
找到一种方法来弄清楚这里究竟发生了什么的最佳方法是什么?
@Bradley:通过尝试重写我的问题找到了答案。编译器返回 3 个处理 StandardOpenOption 的特定错误。使用它和 Java API,我找到了解决方案。谢谢。
@NomadMaker:首先想到的是我没有为 newByteChannel 正确包含包。第二个选项是论点需要更具体的参考。
答案:newByteChannel(...);需要打开选项参数来引用 StandardOpenOption.READ 和 WRITE。这样:
...newByteChannel(raf, StandardOpenOption.READ, StandardOpenOption.WRITE);
此更改已在 Java SE 11 中实现。该程序现在可以正常工作。