如果我正确地解释了这种格式,则您的二进制文件格式具有固定长度的记录。其中一些记录不是字符数据(COBOL计算字段?)
因此,您将不得不使用更底层的方法来处理每个记录的各个字段来读取记录:
import java.io.*;public class Record { private byte[] kdgex = new byte[2]; // COMP private byte[] b1pre = new byte[2]; // COMP private byte[] b1number = new byte[8]; // DISPLAY // other fields public void read(DataInput data) throws IOException { data.readFully(kdgex); data.readFully(b1pre); data.readFully(b1number); // other fields } public void write(DataOutput out) throws IOException { out.write(kdgex); out.write(b1pre); out.write(b1number); // other fields }}
在这里,我已将字节数组用于记录的前三个字段,但是您可以在适当的地方使用其他更合适的类型(如a
short用于带有readShort的第一个字段。)
注意:我对字段宽度的解释可能是错误的; 这只是一个例子。
该DataInputStream类一般用作DataInput中的实现。
由于源编码和目标编码中的所有字符都使用一个八位字节的代码点,因此您应该能够使用以下方法对字符数据字段进行转码:
public static byte[] transpreField(byte[] source, Charset from, Charset to) { byte[] result = new String(source, from).getBytes(to); if (result.length != source.length) { throw new AssertionError(result.length + "!=" + source.length); } return result;}
我建议使用COBOL标记您的问题(假设这是这种格式的来源),以便其他人可以更权威地谈论数据源的格式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)