【发布时间】:2013-12-25 22:39:48
【问题描述】:
所以我使用以下方法
(文件通过'convertFileToByteArray()'转换为字节数组,然后通过'convertByteArrayToBitTextFile()'写入.txt文件
将任何类型的文件转换为二进制文本文件(我的意思是只有人类可读形式的 1 和 0。)
public static byte[] convertFileToByteArray(String path) throws IOException
{
File file = new File(path);
byte[] fileData;
fileData = new byte[(int)file.length()];
FileInputStream in = new FileInputStream(file);
in.read(fileData);
in.close();
return fileData;
}
public static boolean convertByteArrayToBitTextFile(String path, byte[] bytes)
{
String content = convertByteArrayToBitString(bytes);
try
{
PrintWriter out = new PrintWriter(path);
out.println(content);
out.close();
return true;
}
catch (FileNotFoundException e)
{
return false;
}
}
public static String convertByteArrayToBitString(byte[] bytes)
{
String content = "";
for (int i = 0; i < bytes.length; i++)
{
content += String.format("%8s", Integer.toBinaryString(bytes[i] & 0xFF)).replace(' ', '0');
}
return content;
}
编辑:附加代码:
public static byte[] convertFileToByteArray(String path) throws IOException
{
File file = new File(path);
byte[] fileData;
fileData = new byte[(int)file.length()];
FileInputStream in = new FileInputStream(file);
in.read(fileData);
in.close();
return fileData;
}
public static boolean convertByteArrayToBitTextFile(String path, byte[] bytes)
{
try
{
PrintWriter out = new PrintWriter(path);
for (int i = 0; i < bytes.length; i++)
{
out.print(String.format("%8s", Integer.toBinaryString(bytes[i] & 0xFF)).replace(' ', '0'));
}
out.close();
return true;
}
catch (FileNotFoundException e)
{
return false;
}
}
public static boolean convertByteArrayToByteTextFile(String path, byte[] bytes)
{
try
{
PrintWriter out = new PrintWriter(path);
for(int i = 0; i < bytes.length; i++)
{
out.print(bytes[i]);
}
out.close();
return true;
}
catch (FileNotFoundException e)
{
return false;
}
}
public static boolean convertByteArrayToRegularFile(String path, byte[] bytes)
{
try
{
PrintWriter out = new PrintWriter(path);
for(int i = 0; i < bytes.length; i++)
{
out.write(bytes[i]);
}
out.close();
return true;
}
catch (FileNotFoundException e)
{
return false;
}
}
public static boolean convertBitFileToByteTextFile(String path)
{
try
{
byte[] b = convertFileToByteArray(path);
convertByteArrayToByteTextFile(path, b);
return true;
}
catch (IOException e)
{
return false;
}
}
我这样做是为了在一个非常基础的层面上尝试压缩方法,所以我们不要讨论为什么要使用人类可读的形式。
到目前为止,这工作得很好,但是我遇到了两个问题。
1) 它需要永远(> 20 分钟将 230KB 转换为二进制文本)。这只是相对复杂的转换的副产品,还是有其他方法可以更快地做到这一点?
2) 主要问题: 我不知道如何将文件转换回原来的样子。从 .txt 重命名为 .exe 不起作用(不足为奇,因为生成的文件比原始文件大两倍)
这是否仍然可能,或者我是否通过将文件转换为人类可读的文本文件而丢失了有关文件应该代表什么的信息? 如果是这样,您知道有什么替代方法可以防止这种情况发生吗?
感谢任何帮助。
【问题讨论】:
标签: java binary file-conversion