我希望能够转换一个ArrayList<String>
来存储从BufferedReader读取的文件的内容,然后将该内容转换为byte []以便使用Java的Cipher类对其进行加密。
我尝试使用.getBytes()
,但是它不起作用,因为我认为我需要先转换ArrayList,并且在弄清楚如何做到这一点时遇到了麻烦。
代码:
// File variable
private static String file;
// From main()
file = args[2];
private static void sendData(SecretKey desedeKey, DataOutputStream dos) throws Exception {
ArrayList<String> fileString = new ArrayList<String>();
String line;
String userFile = file + ".txt";
BufferedReader in = new BufferedReader(new FileReader(userFile));
while ((line = in.readLine()) != null) {
fileString.add(line.getBytes()); //error here
}
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, desedeKey);
byte[] output = cipher.doFinal(fileString.getBytes("UTF-8")); //error here
dos.writeInt(output.length);
dos.write(output);
System.out.println("Encrypted Data: " + Arrays.toString(output));
}
非常感谢,谢谢!
答案 0 :(得分:6)
为什么要将其读取为字符串并将其转换为字节数组?从Java 7开始,您可以执行以下操作:
byte[] input= Files.readAllBytes(new File(userFile.toPath());
然后将该内容传递给密码。
byte[] output = cipher.doFinal(input);
如果您需要处理大文件,也可以考虑使用流(InputStream和CipherOutputStream)而不是将整个文件加载到内存中。
答案 1 :(得分:4)
连接字符串或创建StringBuffer
。
StringBuffer buffer = new StringBuffer();
String line;
String userFile = file + ".txt";
BufferedReader in = new BufferedReader(new FileReader(userFile));
while ((line = in.readLine()) != null) {
buffer.append(line); //error here
}
byte[] bytes = buffer.toString().getBytes();
答案 2 :(得分:0)
因此,整个ArrayList
实际上是单个String
吗?
一种简单的方法是将其中的所有Strings
合并为一个,然后在其上调用.getBytes()
。
答案 3 :(得分:0)
为什么使用ArrayList。只需使用StringBuffer并将文件的完整内容保存为单个字符串即可。
答案 4 :(得分:-3)
将所有字符串合并在一个Like上
String anyName = allstring;
然后调用此
anyName.getBytes();
它将为您提供帮助。
答案 5 :(得分:-3)
您可以尝试利用Java的序列化功能,并使用包裹在ByteOutputStream周围的ObjectOutputStream:
try (ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bout)) {
out.writeObject(list);
out.flush();
byte[] data = bout.toByteArray();
} catch (IOException e) {
// Do something with the exception
}
这种方法的缺点是字节数组的内容将与列表实现的序列化形式相关联,因此在更高版本的Java版本中,将其读回到列表中可能会产生奇怪的结果。