【发布时间】:2018-07-04 03:27:55
【问题描述】:
我目前正在尝试编写一个程序,该程序读取以位或 0 和 1 写入的压缩文件,并将它们转换为 0 和 1 的字符串。
学校提供了一个类和方法,用于读取 1 位并将其转换为字符 char。所以要读取一位并将其转换为字符,我需要做的就是输入我的代码:
char oneBit = inputFile.readBit();
在我的主要方法中。
如何让我的程序读取压缩文件中的每一位并将它们转换为字符?使用.readBit 方法?以及如何将所有字符 0 和 1 转换为 0 和 1 字符串?
readBit 方法:
public char readBit() {
char c = 0;
if (bitsRead == 8)
try {
if (in.available() > 0) { // We have not reached the end of the
// file
buffer = (char) in.read();
bitsRead = 0;
} else
return 0;
} catch (IOException e) {
System.out.println("Error reading from file ");
System.exit(0); // Terminate the program
}
// return next bit from the buffer; bit is converted first to char
if ((buffer & 128) == 0)
c = '0';
else
c = '1';
buffer = (char) (buffer << 1);
++bitsRead;
return c;
}
in 是输入文件。
【问题讨论】:
-
如果不更好地了解您正在使用的 API,我们将无法为您提供帮助。 API 应向您提供有关可用位数的信息或告诉您何时到达文件末尾的存在条件(例如返回
-1) -
我对 java 编码很陌生(1 周前开始),所以在编码术语方面我是一个完全的菜鸟。你能解释一下你的意思吗?对于这个任务,我们没有被要求做任何复杂的事情,我们只是被要求使用 while 循环、for 循环和字符串连接来完成这项工作。 ://
-
从实际的角度来看,所有循环都有一个退出条件。在您的情况下,您正在循环,因为您一次只能读取一位,并且可能输入文件包含许多位。你知道你正在处理的文件中有多少位吗?
-
我现在在主要问题中包含了 readBit 方法。我认为退出条件是 in.available() > 0 对吗?至于位数,我们有几个不同的文件要处理,我们无法真正打开这些文件:/它们是压缩的,所以在打开这些文件时,它们都只是符号。
-
删除
available()测试。这不是对文件结尾的测试。请参阅 Javadoc。只需将in.read()的结果测试为 -1,然后再将其转换为char。
标签: java string char compression bit