【问题标题】:Oracle snippet does not give back resultsOracle 片段不返回结果
【发布时间】:2013-05-09 16:08:38
【问题描述】:

这里我有以下来自this oracle java 教程的代码:

// Defaults to READ
try (SeekableByteChannel sbc = Files.newByteChannel(file)) {
    ByteBuffer buf = ByteBuffer.allocate(10);

    // Read the bytes with the proper encoding for this platform.  If
    // you skip this step, you might see something that looks like
    // Chinese characters when you expect Latin-style characters.
    String encoding = System.getProperty("file.encoding");
    while (sbc.read(buf) > 0) {
        buf.rewind();
        System.out.print(Charset.forName(encoding).decode(buf));
        buf.flip();//LINE X
    }
} catch (IOException x) {
    System.out.println("caught exception: " + x);

所以基本上我没有得到任何输出。 我试图在while循环中放置一些标志来检查它是否进入,它是否进入。我还更改了Charset.defaultCharset().decode(buf) 中的编码,结果:没有输出。 当然文件中有文本传递给newByteChannel(file);

有什么想法吗? 提前非常感谢。

**

编辑:

** 已解决,只是我尝试访问的文件之前意外损坏了。更改文件后,一切正常。

【问题讨论】:

    标签: java io nio


    【解决方案1】:

    代码看起来不对。尝试将rewind() 更改为flip(), 并将flip() 更改为compact().

    【讨论】:

    • 然后尝试删除初始的翻转()。我似乎记得 decode() 在内部执行此操作,并为您提供一个翻转的缓冲区。不过不要丢失 compact()。
    • 好吧抱歉,显然我试图通过通道访问的文件已损坏。这就是 oracle sn-p 不起作用的原因。现在我重新创建了文件,一切都可以使用原始的 oracle 代码正常工作。
    • @EJP 你认为在这种情况下使用 clear() 代替 compact() 可以吗?据我了解,compact() 处理并非所有数据都被消耗的情况,而 CharsetDecoder 可能不是这种情况。
    • @Joe23 我看不出有任何理由去考虑冒险。 “可能”对我来说不够强大。
    • @EJP 明白了。我发现这个问题是为了讨论 op 提到的 oracle 文档中的损坏示例。只是想确保我对 API 的理解是正确的。感谢您花时间回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多