如何在java中读/写XORed txt文件UTF8?

时间:2016-02-10 09:40:47

标签: java

到目前为止我做了什么:

我用文本读取file1,用键对字节进行异或,然后将其写回另一个文件2。 我的问题:我从file1读取了例如'H',字节值是72;

72 XOR -32 = -88 现在我写了-88到file2。 当我读取file2时,我应该得到-88作为第一个字节,但我得到-3。

Regex rgx2 = new Regex("(?<=NOM[\t])((.|\n)*)ADJ.*");

(?<=NOM[\t]) //preceded by "NOM   "
((.|\n)*) // anything (should be "anything but NOM")
ADJ.* //finish with an adjective

2 个答案:

答案 0 :(得分:1)

您不是以字节形式读取文件 - 您将其视为字符。加密数据不是有效的UTF-8编码文本,因此您不应该尝试将其读取。

同样,你不应该编写任意字节数组,就好像它们是UTF-8编码的文本一样。

基本上,您的方法有签名接受或返回任意二进制数据 - 根本不使用WriterReader。只需将数据直接写入流。 (并且不要吞下异常 - 如果你没有写出重要的数据,你真的想继续吗?)

我实际上会完全删除您的readInputwriteOutput方法。相反,请使用Files.readAllBytesFiles.write

答案 1 :(得分:0)

writeOutput 方法中,将加密的字节数组转换为UTF-8字符串,这会将稍后写入的实际字节更改为该文件。尝试使用此代码段查看当您尝试将具有负值的字节数组转换为UTF-8时发生的情况字符串:

final String s = new String(new byte[]{-1}, "UTF-8");
System.out.println(Arrays.toString(s.getBytes("UTF-8")));

它会打印[-17, -65, -67]之类的内容。尝试使用OutputStream将字节写入文件。

new FileOutputStream(file).write(encrypted);