【问题标题】:Problem with Scanner class in javajava中的Scanner类的问题
【发布时间】:2011-06-12 09:05:10
【问题描述】:

我使用FileOutputStream 类在文件中写入了一些二进制数据。现在我想用Scanner 类阅读它,但它不能。是否可以使用 Scanner 类读取二进制文件?如果是,那么如何?

编辑:

I solve it by in.nextline();

【问题讨论】:

  • 您无法使用 in.readLine() 读取二进制文件。如果您可以使用 Scanner 读取文件,则它不是二进制文件。
  • 您有十多个问题没有接受。 ;)

标签: java java.util.scanner


【解决方案1】:

要读取二进制文件,您可以将 DataInputStream 或 ByteBuffer 与 NIO 结合使用。

【讨论】:

  • 我想从扫描仪类中使用
  • @mehdi,您能解释一下为什么需要使用扫描仪吗?您可以使用 Scanner 进行大量工作。您仍然需要使用 DataInputStream 将数据转换为文本以供 Scanner 使用。除非您有一个只接受 Scanner 的现有库,否则这将毫无意义。
【解决方案2】:

现在我想用 Scanner 类读取它,但它不能。

这是一个正确的观察。 Scanner 不会读取二进制数据,它不是为此目的而设计的。扫描程序期望提供一个实现Readable 接口的对象,其合同规定只能返回字符。它可以接受 InputStream,but as the API states使用底层平台的默认字符集将流中的字节转换为字符。

是否可以使用 Scanner 类读取二进制文件?如果是,那么如何?

按照前面的解释,这是不可能的,除非你以某种方式编写它们,以便上述转换字节的过程返回字符。如果您需要从流中访问二进制数据,则需要避免使用 Readers 和 Readable 对象。您需要处理原始的InputStreamsFilterInputStreams,这将返回字节数组或合适的对象。在您的具体情况下,您需要FileInputStream

提示:

  1. 在 Java 中处理字符时使用 Reader 和 Writer 对象。
  2. 避免将上述内容用于二进制数据。请改用 InputStreams 和 OutputStreams。
  3. 了解decorator pattern is implemented in java.io.

【讨论】:

    【解决方案3】:

    您是否阅读过 API 文档?

    一个可以解析的简单文本扫描器 原始类型和字符串使用 正则表达式。

    http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html

    这可能会对您有所帮助:

    Best way to read structured binary files with Java

    【讨论】:

    • 我看到了,但没有看到任何可以帮助我的东西!
    • @mehdi,您没有想到二进制数据与原始类型和字符串不完全相同吗?为了强调 Peter 发布的部分摘录:一个简单的 text 扫描器,可以使用正则表达式解析原始类型和字符串。
    • @mehdi,那你为什么要坚持使用扫描仪?
    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2021-05-19
    相关资源
    最近更新 更多