我的字节数组输出在输出中显示未使用的位(默认值)为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]
答案 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]不受影响。