java - 使用 Java 将任何文件转换为十六进制并再次转换回来

标签 java

我有一些文件想要转换为十六进制,更改,然后再次反转,但我在尝试执行 jar、zip 和 rars 时遇到问题。它似乎只适用于包含正常可读文本的文件。我环顾四周,但找不到任何可以让 jar 或 bat 正确执行此操作的东西。有没有人有一个答案可以兼顾两者?转换为十六进制然后再转换回来,而不仅仅是十六进制?

最佳答案

您可以将任何文件转换为十六进制。只需获取字节流,并将每个字节映射到两个十六进制数字即可。

这是一个实用程序类,可让您在二进制流与十六进制流之间相互转换:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;

public class Hex {
    public static void binaryToHex(InputStream is, OutputStream os) {
        Writer writer = new BufferedWriter(new OutputStreamWriter(os));

        try {
            int value;

            while ((value = is.read()) != -1) {
                writer.write(String.format("%02X", value));
            }

            writer.flush();
        } catch (IOException e) {
            System.err.println("An error occurred");
        }
    }

    public static void hexToBinary(InputStream is, OutputStream os) {
        Reader reader = new BufferedReader(new InputStreamReader(is));

        try {
            char buffer[] = new char[2];

            while (reader.read(buffer) != -1) {
                os.write((Character.digit(buffer[0], 16) << 4)
                        + Character.digit(buffer[1], 16));
            }
        } catch (IOException e) {
            System.err.println("An error occurred");
        }
    }
}

部分灵感来自this sample from Mykongthis answer .

关于java - 使用 Java 将任何文件转换为十六进制并再次转换回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174084/

相关文章:

Java API 设计 : NumberFormatException for Method that Parses a Semi-Numeric String?

java - EJB QL 中不区分大小写的搜索

java - Spring 循环依赖与范围 PROTOTYPE

java - 用反射覆盖最终静态字段是否有限制?

java - hibernate 一对多: Should the entity contain the foreign key or the whole object

java - CursorLoader 不刷新数据

java - 我的文件阅读器程序需要按列打印、一长行打印?

java - 写在文本文件的开头 Java

java - 是否可以调用 super 接口(interface)的默认方法?

java - 渲染 Java AWT Canvas 以适合屏幕