如何使用超级超级方法?

时间:2014-03-01 12:02:27

标签: java

这是问的问题:

  

开发一个从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();

    }


}

}

4 个答案:

答案 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. 输出文件名中不应包含空格
  2. 您列出的输入文件中的数据没有限制,因此我建议您使用“将数据读入字节数组”方法(以防“-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;
//    }
//}

}