我有一个同时包含ASCII文本和二进制内容的文件。我想提取文本而不必解析二进制内容,因为二进制内容是180MB。我可以简单地提取文本以便进一步操作......最好的方法是什么。
ASCII位于文件的最开头。
答案 0 :(得分:3)
有4个库可以读取Java here中的FITS文件:
<强>爪哇强>
nom.tam.fits个班级
开发了一个Java FITS库,它可以为FITS图像和二进制表提供高效的 - 至少用于Java - I / O. Java库支持所有基本FITS格式和gzip压缩文件。支持访问数据子集,可以使用HIERARCH约定。
包含用于查看和编辑FITS文件的applet和应用程序。还包括用于读写FITS数据的通用包。如果可选的PGP jar文件可用,它可以读取PGP加密文件。
jfits库支持FITS图像以及ASCII和二进制表。支持对关键字和数据进行内联修改。
纯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格式。这就是你可以获得的最终来源。