我使用了netty 3.6,我希望将文件数据写入任何地区的频道,并且还要加密。我在一个频道上用FileRegion写一个文件数据,没有任何问题,工作得很好,不要吃掉我的RAM,但是我想要读取块的大块(通过RC4)(块大小是512),因为我用这个代码:
if (e.getChannel().isWritable()) {
FileInputStream fin = new FileInputStream(file);
byte[] data = new byte[512];
for (int i = 512; i < file.length(); i += 512) {
fin.read(data);
index_range += 512;
e.getChannel().write(ChannelBuffers.wrappedBuffer(RC4.encrypte(data)));
}
int remain_len=(int)(file.length() - index_range);
if(remain_len>0){
data = new byte[remain_len];
fin.read(data);
e.getChannel().write(ChannelBuffers.wrappedBuffer(RC4.encrypte(data)));
}
fin.close();
}
但我得到线程“pool-5-thread-1”中的异常java.lang.OutOfMemoryError:Java堆空间,我还使用 RandomAccessFile 上课但问题是一样的,我怎样才能解决这个问题
答案 0 :(得分:2)
使用ChunkedWriteHandler和ChunkedNioFile。然后你可以拦截生成的ChannelBuffer并动态进行加密。
答案 1 :(得分:0)
@normanm,您给出的示例在服务器端使用ChunkedFile,我可以在发布请求时使用ChunkedFile吗?