读取分块文件 Netty Java
Read Chunked File Netty Java
我目前正在做一个学习 netty 的项目,我正在尝试使用 ChunkedFileHandler 将文件从服务器发送到客户端。
发送文件的服务器端代码
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("In channel and the context is " + ctx);
ctx.writeAndFlush(new ChunkedFile(new File("Test//ige.dat")));
}
文件在控制台中记录时发送。
但是现在回到客户端,我的记录器说我正在接收 1024 字节的大块文件,这绝对没问题。
public class ChunkedFileClientHandler extends SimpleChannelInboundHandler<ChunkedFile> {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
throws Exception {
System.out.println("Read a chunk of file");
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
System.out.println("Chunk read completed!");
}
正在发送的文件服务器大小为 239 MB。每次接收到块时,首先触发 channelRead 并触发 channelReadComplete。
现在我的问题是如何 assemble 这些块并再次形成文件,文件名和所有其他信息都完好无损。我查看了 netty 网站,但他们没有用于读取分块文件的客户端代码。
谢谢
ChunkedFile API 只传输文件的内容。如果您还需要传输文件名和所有其他信息(具体是什么信息?),您需要提出一个协议,允许您传输文件数据之外的其他信息。
或者,您可以使用现有的协议,例如 HTTP,它已经包含 header 用于传输文件名及其内容。
要将数据写入文件,只需使用目标路径创建一个 FileOutputStream,然后将接收到的数据写入其中。
我目前正在做一个学习 netty 的项目,我正在尝试使用 ChunkedFileHandler 将文件从服务器发送到客户端。 发送文件的服务器端代码
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("In channel and the context is " + ctx);
ctx.writeAndFlush(new ChunkedFile(new File("Test//ige.dat")));
}
文件在控制台中记录时发送。 但是现在回到客户端,我的记录器说我正在接收 1024 字节的大块文件,这绝对没问题。
public class ChunkedFileClientHandler extends SimpleChannelInboundHandler<ChunkedFile> {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
throws Exception {
System.out.println("Read a chunk of file");
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
System.out.println("Chunk read completed!");
}
正在发送的文件服务器大小为 239 MB。每次接收到块时,首先触发 channelRead 并触发 channelReadComplete。
现在我的问题是如何 assemble 这些块并再次形成文件,文件名和所有其他信息都完好无损。我查看了 netty 网站,但他们没有用于读取分块文件的客户端代码。
谢谢
ChunkedFile API 只传输文件的内容。如果您还需要传输文件名和所有其他信息(具体是什么信息?),您需要提出一个协议,允许您传输文件数据之外的其他信息。
或者,您可以使用现有的协议,例如 HTTP,它已经包含 header 用于传输文件名及其内容。
要将数据写入文件,只需使用目标路径创建一个 FileOutputStream,然后将接收到的数据写入其中。