Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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中操作位_Java_Bit Manipulation - Fatal编程技术网

以位表示形式打开文件,并在Java中操作位

以位表示形式打开文件,并在Java中操作位,java,bit-manipulation,Java,Bit Manipulation,我知道使用十六进制编辑器,可以编辑二进制文件,并用每个十六进制值更改4位,但我考虑的是一个需要修改单个位而不是4位的项目 那么,有没有一种方法可以读取位中的内容(例如ASCII编码的纯文本文件)并在Java中处理单个位 作为noob,我可以考虑加载每个字节并生成一个包含每个字节的每个8位表示的字符串,但这是一种相当复杂的方式,会浪费大量空间。此外,这种方法需要我保留一个包含每个可用字节的8位表示的列表来查找它。其他人已经暗示您的问题很广泛,其他网站、资源或搜索可能会更好地回答您的问题 不过,我

我知道使用十六进制编辑器,可以编辑二进制文件,并用每个十六进制值更改4位,但我考虑的是一个需要修改单个位而不是4位的项目

那么,有没有一种方法可以读取位中的内容(例如ASCII编码的纯文本文件)并在Java中处理单个位


作为noob,我可以考虑加载每个字节并生成一个包含每个字节的每个8位表示的字符串,但这是一种相当复杂的方式,会浪费大量空间。此外,这种方法需要我保留一个包含每个可用字节的8位表示的列表来查找它。

其他人已经暗示您的问题很广泛,其他网站、资源或搜索可能会更好地回答您的问题


不过,我想向您展示一些小片段,您可以从中开始

// Read a file into a byte array, we are not interested
// in interpreting encodings, just plain bytes
final byte[] fileContent = Files.readAllBytes(Paths.get("pathToMyFile"));

// Iterate the content and display one byte per line
for (final byte data : fileContent) {
    // Convert to a regular 8-bit representation
    System.out.println(Integer.toBinaryString(data & 255 | 256).substring(1));
}

您还可以通过访问数组内容并使用简单的位运算符(如
&
|
^
)轻松地操作字节和位

下面是一个片段,演示如何在给定位置设置和取消设置位:

byte data = ...;

// Set it (to 1)
data = data | (1 << pos);

// Unset it (to 0)
data = data & ~(1 << pos);
字节数据=。。。;
//将其设置为(1)

data=data |(1其他人已经暗示你的问题很广泛,其他网站、资源或搜索可能会更好地回答你的问题


不过,我想向您展示一些小片段,您可以从中开始

// Read a file into a byte array, we are not interested
// in interpreting encodings, just plain bytes
final byte[] fileContent = Files.readAllBytes(Paths.get("pathToMyFile"));

// Iterate the content and display one byte per line
for (final byte data : fileContent) {
    // Convert to a regular 8-bit representation
    System.out.println(Integer.toBinaryString(data & 255 | 256).substring(1));
}

您还可以通过访问数组内容并使用简单的位运算符(如
&
|
^
)轻松地操作字节和位

下面是一个片段,演示如何在给定位置设置和取消设置位:

byte data = ...;

// Set it (to 1)
data = data | (1 << pos);

// Unset it (to 0)
data = data & ~(1 << pos);
字节数据=。。。;
//将其设置为(1)

data=data |(1 Stackoverflow不是一个提出广泛问题的好地方,这些问题可以通过非现场资源和教程轻松、更好地回答。在您的情况下,简单地搜索“java中的位操作”和“python中的位操作”可能会得到更好、更完整的答案。还有“位”与“十六进制”与“字节”是一种不同的查看数据的方式,除了读给人有多困难外,没有任何其他因素。如果你能将一块位(比如说,一次4位)编辑成任意值,那就是修改单个位的有效方式,这确实是专业程序员使用的方法。@JamesKPolk这就是我为什么要标记出来的原因最后的问题。实际的问题是关于在java中读取位文件,然后再处理位。不过,我可以重新表述这个问题并删除加密部分以防止混淆。Stackoverflow不是一个提出广泛问题的好地方,这些问题可以通过非现场资源和教程轻松、更好地回答。在您的例子中,简单地搜索“java中的位操作”和“python中的位操作”可能会得到更好、更完整的答案是一种不同的查看数据的方式,除了读给人有多困难外,没有任何其他因素。如果你能将一块位(比如说,一次4位)编辑成任意值,那就是修改单个位的有效方式,这确实是专业程序员使用的方法。@JamesKPolk这就是我为什么要标记出来的原因最后是一个问题。实际的问题是如何在java中读取一个二进制文件,然后再处理二进制文件。不过,我可以重新表述这个问题,删除加密部分,以避免混淆。