这是问的问题:
开发一个从FileInputStream派生的类Decrypt,并覆盖FileInputStream的read()方法,以便覆盖read方法返回一个解密的整数。使用此类解密包含out.txt。
的文件信息
我编写了一个加密代码,它可以工作,但解密却没有。对于解密,我必须将值与128进行异或。 问题是在运行程序后,它不会在输出文件上写任何内容。
以下是示例输入的链接: https://www.dropbox.com/s/jb361cxmjc9yd8n/in.txt
这是示例输出的样子: 他高傲的头脑有多高。
代码如下:
//Decrypt class
import java.io.*;
public class Decrypt extends FileInputStream {
public Decrypt(String name) throws FileNotFoundException {
super(name);
}
public int read() throws IOException {
int value = super.read();
int xor = value^128; // exclusive OR to decrypt
return xor;
}
}
//main
import java.io.*;
public class LA4ex3b {
public static void main(String[] args) throws IOException {
Decrypt de=null;
FileOutputStream output=null;
try
{
de = new Decrypt("C:/Users/user/workspace/LA4ex3a/in.txt");
output = new FileOutputStream("C:/Users/user/workspace/LA4ex3a /out.txt");
int a;
while ((a = de.read()) != -1)
{
output.write(a);
}
}
finally
{
if (de!=null)
de.close();
if (output!=null)
output.close();
}
}
}
答案 0 :(得分:2)
int value = super.read();
int xor = value^128; // exclusive OR to decrypt
return xor;
在上面你不检查从super.read()
返回的特殊值-1,你必须透明地推进。如果没有它,你将永远不会在while
循环中收到-1,程序将无法正常终止。下面的代码应该可以解决这个问题:
int value = super.read();
return value == -1? value : value^128;
答案 1 :(得分:0)
好吧,我认为你应该在你的Overriden方法中问一下,superher.read()也是-1。因为如果super.read()是-1,并且你用128对它进行xor,它将不再是-1,所以Decrypt.read()不会是-1。
编辑:好的,我还不够快!
答案 2 :(得分:0)
两个快速更正:
您列出的输入文件中的数据没有限制,因此我建议您使用“将数据读入字节数组”方法(以防“-1”字节值是输入中的合法数据)。你的特定文本输入可能没问题,但想想这些问题并解决最容易解决的问题,你仍然可以简单。
byte [] dataBuffer = new byte [1000]; int bytesRead;
bytesRead = de.read(dataBuffer); while(bytesRead!= -1)[ //解密每个字节 //写下解密的字节 bytesRead = de.read(dataBuffer); }
答案 3 :(得分:0)
class Overload
{
public int Add(int a, int b)
{
Console.WriteLine("Int method with Two params executed");
return a + b;
}
public int Add(int a, int b, int c)
{
Console.WriteLine("Int method with three params executed");
return a + b + c;
}
public double Add(double a, double b)
{
Console.WriteLine("double method with Two params executed");
return a + b;
}
}
//class Derived : Overload //over riding//
//{
// public int Add(int a, int b)
// {
// return a + b;
// }
//}
}