Java 从文件读取时获取与写入文件不同的字节数组

Java 从文件读取时获取与写入文件不同的字节数组,java,file,input,output,bytearray,Java,File,Input,Output,Bytearray,我正在将字节数组写入文件: PrintWriter pw = new PrintWriter(new FileOutputStream(fileOutput, true)); pw.write(new String(cryptogram, Charset.defaultCharset())); pw.close(); 然后,我从文件中读取它,如下所示: String cryptogramString = new String(); while (scPriv.hasNext()) {

我正在将字节数组写入文件:

PrintWriter pw = new PrintWriter(new FileOutputStream(fileOutput, true));
pw.write(new String(cryptogram, Charset.defaultCharset()));
pw.close();
然后,我从文件中读取它,如下所示:

String cryptogramString = new String();
while (scPriv.hasNext()) {
    linePriv = scPriv.nextLine();
    cryptogramString += linePriv;
}
但是我不知道如何从
cryptogramString
生成
byte[]
。我正在尝试:

byte[] b = cryptogramString.getBytes(Charset.defaultCharset());
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(cryptogram));

但它不会返回相同的值。有人知道如何纠正这种错误吗?

你应该决定是写文本还是二进制

加密数据总是二进制的,这意味着您不应该使用Reader/Writer/String类

try (FileOutputstream out = new FileOutputStream(filename)) {
    out.write(bytes);
}
读回

byte[] bytes = new byte[(int) (new File(filename).length())];
try (FileInputstream in = new FileInputStream(filename)) {
    in.read(bytes);
}

我有一个包含xml和纯文本的文件,所以我无法读取整个文件

您也不能将二进制文件写入文本文件。可以使用base64对其进行编码


您应该决定是编写文本还是二进制文件

加密数据总是二进制的,这意味着您不应该使用Reader/Writer/String类

try (FileOutputstream out = new FileOutputStream(filename)) {
    out.write(bytes);
}
读回

byte[] bytes = new byte[(int) (new File(filename).length())];
try (FileInputstream in = new FileInputStream(filename)) {
    in.read(bytes);
}

我有一个包含xml和纯文本的文件,所以我无法读取整个文件

您也不能将二进制文件写入文本文件。可以使用base64对其进行编码


我不明白,它不会返回相同的值。你在比较什么?这听起来不像是应该与字符串交互的东西,而是应该只使用
InputStream
OutputStream
并严格处理字节?System.out.println(Arrays.toString(b));与System.out.println(Arrays.toString(cryptogram))不同;我有一个包含xml和纯文本的文件,因此我无法读取整个文件
hasNext
检查可用标记,而
nextLine
将一直读取到下一行分隔符,从返回值中排除行分隔符字符。按照前面的建议,直接将文件读入一个
字节[]
。我不明白,它不会返回相同的值。你在比较什么?这听起来不像是应该与字符串交互的东西,而是应该只使用
InputStream
OutputStream
并严格处理字节?System.out.println(Arrays.toString(b));与System.out.println(Arrays.toString(cryptogram))不同;我有一个包含xml和纯文本的文件,因此我无法读取整个文件
hasNext
检查可用标记,而
nextLine
将一直读取到下一行分隔符,从返回值中排除行分隔符字符。如前所述,直接将文件读入
字节[]
即可。我的文件结构如下
密码
如何使用FileInputStream读取此密码而不读取xml?我不能使用base64,因为它扩展了大小。您在单个文件中混合了文本(xml)和二进制数据?这真的不是一个好方法。这是我对这项任务的要求,我必须这样做。如果由我决定,我会找到不同的方法。@SzymonKaczorowski您可以添加它,但它不再是XML。@SzymonKaczorowski您必须像上面一样阅读它,但您必须先跳过XML,但不能再这样了。我建议也使用二进制模式来阅读,以避免阅读过多。我的文件结构如下
密码
如何使用FileInputStream阅读此密码而不阅读xml?我不能使用base64,因为它扩展了大小。您在单个文件中混合了文本(xml)和二进制数据?这真的不是一个好方法。这是我对这项任务的要求,我必须这样做。如果由我决定,我会找到不同的方法。@SzymonKaczorowski您可以添加它,但它不再是XML。@SzymonKaczorowski您必须像上面一样阅读它,但您必须先跳过XML,但不能再这样了。我建议也使用二进制模式来阅读,以避免阅读过多。