0

我正在为我的项目实施视频隐写术。我从这里遇到了算法。我已经尝试并测试了代码,嵌入部分工作正常。但是我遇到了一个问题,readByte这是VideoSteganography类中的最后一个方法。方法给出ArrayIndexOutOfBoundsException。下面是方法。

我将参数传递为

    String fname = jTextField3.getText();
    File fil = new File(fname);
    String password = "123456";

    SteganoInformation cls = new SteganoInformation(fil);

    VideoSteganography.retrieveFile(cls, password, true);

方法是

public static boolean retrieveFile(SteganoInformation info, String password, boolean overwrite)
    {
        File dataFile= null;
        features= info.getFeatures();
        try
        {
            masterFile= info.getFile();
            byteArrayIn= new byte[(int) masterFile.length()];

            DataInputStream in= new DataInputStream(new FileInputStream(masterFile));
            in.read(byteArrayIn, 0, (int)masterFile.length());
            in.close();  
            messageSize= info.getDataLength();
            byte[] fileArray= new byte[messageSize];
            inputOutputMarker= info.getInputMarker();
            readBytes(fileArray);
.......
}

注意上面的方法readBytes,它抛出异常,它的写法如下

private static void readBytes(byte[] bytes)
    {
        int size= bytes.length;

        for(int i=0; i<size ; i++)
        {


            bytes[i]= byteArrayIn[inputOutputMarker];
            inputOutputMarker++;



        }
    }
4

2 回答 2

0

这里的问题是“byteArrayIn[inputOutputMarker]”,重新检查 inputOutputMarker 的值以及它可能具有的值的范围。

于 2013-04-15T08:38:16.550 回答
0

@Mazen Wadi,感谢您的回复。但我想出了是什么触发了这个异常,并想分享一下,以防有人遇到同样的问题。从两个类 "VideoSteganography class" 和 "SteganoInformation class" 中,两个类的方法 retrieveBytes() 有两个循环。将循环更改为下面的循环,并确保两个类中的循环大小一致。注意:从两个类的retrieveBytes 方法中更改j=6,您的问题就解决了。

private static void retrieveBytes(byte[] bytes)
        {
            int size= bytes.length;

            for(int i=0; i< size; i++)
            {
                byte1= 0;
                for(int j=6; j>=0; j-=2)
                {
                    byte2= byteArrayIn[inputOutputMarker];
                    inputOutputMarker++;

                    byte2&= 0x03;
                    byte2<<= j;
                    byte1|= byte2;
                }
                bytes[i]= byte1;
            }
        }
于 2013-04-17T18:08:15.310 回答