如何从字节数组中删除默认位

时间:2013-06-25 15:22:30

标签: java bytearray

我的字节数组输出在输出中显示未使用的位(默认值)为0 如何从结果中删除它们?

byte[] data=new byte[20];
int cl; 
try {
    FileInputStream fs = new FileInputStream("c:/abc.txt");

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    while ((cl = fs.read(data,0,data.length)) != -1)
        os.write(data,0,cl);
    os.flush();
}

System.out.println(Arrays.toString(data));

以下是我的代码的输出:

[104, 105, 32, 119, 101, 108, 99, 111, 109, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

2 个答案:

答案 0 :(得分:0)

如果只写了20个字节。

    if ((cl = fs.read(data,0,data.length)) != -1) {
        while (cl > 1 && data[cl - 1] == 0)
            --cl;
        os.write(data,0,cl);
    }

虽然看起来文件是文本文件,但是用二进制零写。 如果您确定总是写入20个字节的数组,并且尾随字节都是0,那么您可以将第一个if再次转换为while

答案 1 :(得分:0)

你确定你不是这个意思吗?

//...
System.out.println(Arrays.toString(os.toByteArray()));

您正在打印用于从字节块中的文件中检索数据的临时数组的内容。通过调用字节数组流的toByteArray方法(请参阅ByteArrayOutputStream#toByteArray),您可以获得假装结果,这是具有适当数组大小的文件的全部内容。

在较小的问题中,您在数据数组中找到的零是在创建数组时定义的零。它们没有被覆盖,因为文件大小不足以至少写入一次所有索引。并引用InputStream#read

  

在每种情况下,元素b [0]到b [off]和元素b [off + len]到b [b.length-1]不受影响。