概述
在NIO提供类库之前,Java的所有文件操作分为两类:
1、基于字节流的InputStream和OutputStream
2、基于字符流的Writer和Reader
Netty在进行大文件传输或者码流过大的时候,使用ChunkedWriteHandler来解决传输过程中可能出现的内存溢出。
下面看看基于Netty的文件操作:
public class FileServer {
public static void main(String[] args) {
EventLoopGroup boss = new NioEventLoopGroup();
EventLoopGroup worker = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(boss, worker)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 100)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch)
throws Exception {
ch.pipeline().addLast(new StringEncoder(CharsetUtil.UTF_8),
new LineBasedFrameDecoder(1024),
new StringDecoder(CharsetUtil.UTF_8),
new FileServerHandler());
}
});
final int PORT = 8089;
ChannelFuture feature = b.bind(PORT).sync();
System.out.println("start file server at port: " + PORT);
feature.channel().closeFuture().sync();
} catch (Exception e) {
e.printStackTrace();
} finally {
boss.shutdownGracefully();
worker.shutdownGracefully();
}
}
static class FileServerHandler extends SimpleChannelInboundHandler<String> {
private static final String CR = System.getProperty("line.separator");
@Override
protected void channelRead0(ChannelHandlerContext ctx, String msg)
throws Exception {
File file = new File(msg);
if (file.exists()) {
if (!file.isFile()) {
ctx.writeAndFlush("Not a file: " + file + CR);
return;
}
ctx.write(file + " " + file.length() + CR);
@SuppressWarnings("resource")
RandomAccessFile randomAccessFile = new RandomAccessFile(msg, "r");
FileRegion fileRegion = new DefaultFileRegion(randomAccessFile.getChannel(), 0, randomAccessFile.length());
ctx.write(fileRegion);
ctx.writeAndFlush(CR);
} else {
ctx.writeAndFlush("File not found: " + file + CR);
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
throws Exception {
super.exceptionCaught(ctx, cause);
ctx.close();
cause.printStackTrace();
}
}
}
最后
以上就是烂漫花生为你收集整理的Netty的入门-文件传输的全部内容,希望文章能够帮你解决Netty的入门-文件传输所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复