栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Java中将EBCDIC转换为ASCII

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Java中将EBCDIC转换为ASCII

如果我正确地解释了这种格式,则您的二进制文件格式具有固定长度的记录。其中一些记录不是字符数据(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标记您的问题(假设这是这种格式的来源),以便其他人可以更权威地谈论数据源的格式。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595766.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号