我一直在编写基本的位级加密代码,我很确定算法是正确的。但我无法测试它。当我运行代码时,第一个循环(使用System.in.read()
)会阻塞代码。当我通过终端发送EOF
信号时,代码不再进展 - 我在下一行检查了一些原始的print
语句。
据我了解,发送EOF
应该read()
返回-1
,退出循环。
我错过了什么?
谢谢。
public class BitLevel {
public static void main(String[] args) throws Exception {
FileInputStream input = new FileInputStream(args[0]);
FileOutputStream output = new FileOutputStream(args[1]);
ArrayList<Integer> key = new ArrayList<Integer>();
int i = 0;
System.out.print("Enter key: ");
System.out.flush();
int c = System.in.read();
while (c != -1) {
key.add((Integer) c);
c = System.in.read();
}
c = input.read();
while (c != -1) {
output.write(c ^ key.get(i).intValue());
output.flush();
i++;
i = i % key.size();
}
}
}
答案 0 :(得分:0)
循环永远不会结束,因为“c”内部没有变化。我想你也打算在循环中调用c = input.read();
。
另外,BTW,你应该在完成它们后关闭它们。
答案 1 :(得分:0)
System.in.read()
上的调用只读取一个字节。您可能希望使用Scanner
,但要解决此问题,请查看此
int c = System.in.read();
while (c != -1) {
key.add((Integer) c);
System.in.read();
}
您阅读c
一次,并且永远不会通过阅读另一个在while循环中更改它。将其更改为
int c = System.in.read();
while (c != -1) {
key.add((Integer) c);
c = System.in.read();
}
答案 2 :(得分:0)
它 返回-1,但您忘记存储返回值,以便进行测试。