Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将LSB提取并保存到字节数组中?_Java_Arrays_Byte_Steganography - Fatal编程技术网

Java 如何将LSB提取并保存到字节数组中?

Java 如何将LSB提取并保存到字节数组中?,java,arrays,byte,steganography,Java,Arrays,Byte,Steganography,我在下面函数中的意图是从文件的每个字节中提取最低有效位,并将其存储到字节数组中,但我一直在努力做到这一点 在while循环中,我借助&提取lsb,然后我想将这个提取的位添加到字节数组中。我不确定索引和将提取的位“附加”到数组中 public byte[]extractLSB(文件,int-size){ FileInputStream FileInputStream=null; 字节[]lsbByteArray=新字节[大小]; int arrayOffset=0; int-dataByte,ex

我在下面函数中的意图是从文件的每个字节中提取最低有效位,并将其存储到字节数组中,但我一直在努力做到这一点

在while循环中,我借助
&
提取lsb,然后我想将这个提取的位添加到字节数组中。我不确定索引和将提取的位“附加”到数组中

public byte[]extractLSB(文件,int-size){
FileInputStream FileInputStream=null;
字节[]lsbByteArray=新字节[大小];
int arrayOffset=0;
int-dataByte,extractedLSB;
字节清除字节=(字节)0x01;//0000 0001
试一试{
fileInputStream=新的fileInputStream(文件);
//从文件输入流逐字节读取
而((dataByte=fileInputStream.read())!=-1){
//提取lsb并将其保存到lsbByteArray
/*
//我一直在尝试这样的事情
extractedLSB=dataByte&clearingByte;//?获取lsb

lsbByteArray[arrayOffset]您可以在while循环中使用字节计数器,除以8以查找字节索引,并为位位置使用模块8

e、 g

extractedLSB=dataByte&(byte)1;

lsbByteArray[counter/8]|=(extractedLSB您已经提供了代码,这是一个很好的开始,但是您没有详细解释什么不起作用或者有什么问题。如果文件流没有8个字节的倍数,您想怎么办?a)丢弃当前组装的字节,b)将其存储为不完整的字节,c)将其向左移动,使其具有8位,并在LSB中填充0,d)其他内容?@Reti43我总是读取具有8个字节数倍数的filestream,因为方法参数
size
定义了之前插入的数据量ode>insertLSB()
方法我在lsb位置的每个文件字节中插入一位。如果我想提取lsb,为什么我要使用
&(byte)1
而不是0x01来清除所有我不关心的位?你能解释一下第二行吗?@martink 0x01只是1的十六进制符号。第二行包含一个输入错误(计数器&8)。在解决方案中添加了一些注释。由于
(计数器%8),我很难想象如何构造
lsbByteArray
。计数器的前8个加法将导致左移位0、1、2、3、4、5、6、7、0,因此创建的字节的顺序将是错误的,或者?@martink实际上您没有指定顺序:)我只是在最低有效位中使用了更自然、最低的字节(顺序)。在问题中,我使用了“追加”这个位被提取到数组中,但现在我知道我应该更具体一些。所以左移应该是7,6,5,4,3,2,1,0?但这对“%”不起作用
extractedLSB = dataByte & (byte) 1;
lsbByteArray[counter/8] |=  ( extractedLSB << (counter % 8));
counter++;