Java:如何编写二进制文件?
我一直在做网络编程好几年了,从那以后我还没有做桌面应用任何编程,我已经忘记了很多事情。如果这太简单,请耐心等待。Java:如何编写二进制文件?
现在我有这种情况:
我想在文件中存储一些散列的单词。我想我应该使用二进制文件(如果我错了,请纠正我)。但我不知道应该如何将文字写入文件。我尝试了很多方法,但是当我读回文件并尝试解密这些文字时,我得到了BadPaddingException
。
没有人有任何想法如何写的字到一个文件?
PS:我使用的加密/解密的话(我是从另一个StackOverflow的线程,有一些修改)这个代码:
public static byte[] encrypt(String property) throws GeneralSecurityException, UnsupportedEncodingException {
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey key = keyFactory.generateSecret(new PBEKeySpec(password));
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(salt, 20));
return pbeCipher.doFinal(property.getBytes("UTF-8"));
}
public static String decrypt(byte[] property) throws GeneralSecurityException, IOException {
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey key = keyFactory.generateSecret(new PBEKeySpec(password));
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(salt, 20));
return new String(pbeCipher.doFinal(property));
}
那么,就用FileInputStream
和FileOutputStream
=)
样品写作:
// encrypted data in array
byte[] data = ...
FileOutputStream fos = ...
fos.write(data, 0, data.length);
fos.flush();
fos.close();
样品阅读:
File inputFile = new File(filePath);
byte[] data = new byte[inputFile.length()];
FileInputStream fis = new FileInputStream(inputFile);
fis.read(data, 0, data.length);
fis.close();
以上代码假定一个文件包含单独的加密项。如果您需要在单个文件中保存多个项目,则需要为此设计一些格式方案。例如,您可以在数据本身之前将加密数据中的字节数存储为2个字节。每个项目2个字节表示加密项目不能超过2^16个字节。当然,你可以使用4个字节的长度。
并回读? 它会自动知道要读取的字节长度吗? – 2012-01-17 13:17:25
用于回读使用FileInputStream和它的方法'avialable()'。在阅读的javadoc:http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html – bezmax 2012-01-17 13:23:35
@Ako FileOutputStream中更新的答案 – 2012-01-17 13:23:53
保存为文本文件对我来说似乎更有意义,数据已经是一个了,所以不需要将其转换为byte[]
,并且如果您需要从文件中读取,则会非常方便。除非你将它从网络上保存下来,并且它已经通过套接字作为byte[]
来了。我知道它说,不提供你的意见,但其严格见仁见智,那是你的问题的唯一部分由前两个没有答案回答
不是我一定不同意,但这不能回答这个问题。作为对原始问题的评论而不是答案,这会更好。 – David 2012-11-03 14:19:09
对不起,我是新来这个网站。无论如何,“我认为我应该使用二进制文件(如果我错了,请纠正我)。”是我试图回应的。对于那个很抱歉。 – 2012-11-03 14:32:13
你有没有尝试过做'的System.out.println(解密(加密(“Hello world”)));'? – bezmax 2012-01-17 13:10:38
是的,它的工作原理! – 2012-01-17 13:11:34
然后请粘贴您的I/O代码。 – bezmax 2012-01-17 13:13:25