将ASCII文本与文件中的二进制内容分开

时间:2010-02-12 03:51:21

标签: java file binary ascii extract

我有一个同时包含ASCII文本和二进制内容的文件。我想提取文本而不必解析二进制内容,因为二进制内容是180MB。我可以简单地提取文本以便进一步操作......最好的方法是什么。

ASCII位于文件的最开头。

6 个答案:

答案 0 :(得分:3)

有4个库可以读取Java here中的FITS文件:

  

<强>爪哇

     

nom.tam.fits个班级

     

开发了一个Java FITS库,它可以为FITS图像和二进制表提供高效的 - 至少用于Java - I / O. Java库支持所有基本FITS格式和gzip压缩文件。支持访问数据子集,可以使用HIERARCH约定。

     

eap.fits

     

包含用于查看和编辑FITS文件的applet和应用程序。还包括用于读写FITS数据的通用包。如果可选的PGP jar文件可用,它可以读取PGP加密文件。

     

jfits

     

jfits库支持FITS图像以及ASCII和二进制表。支持对关键字和数据进行内联修改。

     

STIL

     

纯java通用表I / O库,可以读取和写入其他表格格式的FITS二进制表。它是高效的,可以提供比物理内存大得多的FITS表的快速顺序或随机读访问。不支持FITS图像。

答案 1 :(得分:1)

我不知道任何读取ASCII字符并忽略其余部分的Java类,但我能想到的最简单的方法是使用strings实用程序(假设您使用的是Unix-基于系统)。

  

概要          字符串[ - ] [-a] [-o] [-t格式] [ - 数字] [-n数字]          [ - ] [file ...]

     

说明          字符串在二进制文件或标准中查找ASCII字符串   输入。          字符串可用于识别随机对象文件和   很多别的          的东西。字符串是4(默认值)或更多的任何序列   印花          以换行符结尾或以null结尾的字符。除非 -   国旗是          给定,字符串在目标文件的所有部分中查找除外   该          (__TEXT,__ text)部分。如果没有指定文件标准输入   是          读取。

然后,您可以将输出传输到另一个文件,并随意执行任何操作。

编辑:使用所有ASCII开头的附加信息,以编程方式提取文本会更容易一些;不过,这比编写代码要快。

答案 2 :(得分:1)

假设你可以知道ASCII内容的结尾,只需从文件中读取字符,直到找到它的结尾,然后关闭文件。

答案 3 :(得分:1)

假设有一些令牌将文件划分为二进制和ASCII组件(例如,一行中的“#END#”),您可以执行以下操作:

import java.io.*;

// ...

public static void main(String args[]) {
  try {
    FileInputStream f = new FileInputStream("object.bin");
    DataInputStream d = new DataInputStream(f);
    BufferedReader b = new BufferedReader(new InputStreamReader(d));

    String s = "";
    while ((s = b.readLine()) != "#END#") {
      // ASCII contents parsed here.
      System.out.println(s);
    }

    d.close();
  } catch (Exception e) {
      System.err.println("kablammo! " + e.getMessage());
  }
}

答案 4 :(得分:1)

有一种方法可以检查特定字符是否符合您的条件(这里,我已经涵盖了键盘上的字符)。一旦你击中了方法返回false的字符,你知道你已经击中了二进制文件。请注意,有效的ASCII字符也可能构成二进制文件的一部分,因此最后可能会有一些额外的字符。

static boolean isAsciiCharacter(char c) {
    return (c >= ' ' && c <= '~') ||
            c == '\n' ||
            c == '\r';
}

答案 5 :(得分:1)

FITS file的前2880个字节是ASCII标头数据,代表36个80列 “卡片图片”。没有行终止符,只有一个36x80的ASCII数组,必要时用空格填充。二进制数据之前可能还有2880字节的ASCII标头;你必须解析第一组标题才能知道预期的ASCII数量。

但我衷心赞同Oscar Reyes建议使用现有的软件包来解码FITS文件!他提到的两个包裹由美国宇航局戈达德太空飞行中心主办,他们也负责维护FITS格式。这就是你可以获得的最终来源。