E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Netty学习笔记
Netty学习笔记
(3) Netty进阶3 -聊天室
文章目录前言聊天室群聊1.思路2.代码1.handler,用于处理消息1.好友聊天消息处理器2.群聊消息处理器3.创建群消息处理器4.加入群聊消息处理器5.查看群成员消息处理器6.退出群消息处理器7.登陆消息处理器8.退出程序处理器2.消息类,用于发送返回1.AbstractResponseMessage2.ChatRequestMessage3.ChatResponseMessage4.Grou
JWASX
·
2024-02-11 09:51
Netty
java
开发语言
后端
Netty学习笔记
Netty应用开发语雀链接1.引言1.1什么是Nettyhttps://netty.io/Nettyisanasynchronousevent-drivennetworkapplicationframeworkforrapiddevelopmentofmaintainablehighperformanceprotocolservers&clients.Netty是一个异步事件驱动的网络应用框架。用
等待花开I
·
2024-01-25 09:48
Netty
学习
网络
服务器
Netty | 第1章 Java NIO 网络编程《Netty In Action》
前言参考资料:《NettyInAction》;B站《尚硅谷Netty视频教程》;本系列为
Netty学习笔记
,本篇介绍总结JavaNIO网络编程。
多氯环己烷
·
2024-01-15 16:34
04、
Netty学习笔记
—(黏包半包及协议设计解析)
文章目录一、粘包与半包1.1、现象分析1.1.1、粘包、半包情况分析1.1.2、滑动窗口、MSS限制、Nagle算法介绍1.2、粘包、半包现象复现1.2.1、粘包复现1.2.2、半包复现1.3、解决方案①短链接(连接、停止作为边界)②定长解码器(指定字节长度解码)③行解码器(分割符解决)④LTC解码器(基于长度字段的帧解码器,长度+内容组成)四个基础字段分析实际案例二、协议设计与解析2.1、red
长路 ㅤ
·
2023-12-28 07:45
#
Netty
java
netty
黏包半包
协议设计
Netty学习笔记
:三、NIO零拷贝
1、传统IO4次上下文切换、4次内存拷贝上图中,上半部分表示用户态和内核态的上下文切换。下半部分表示数据复制操作。下面说说他们的步骤:read调用导致用户态到内核态的一次变化,同时,第一次复制开始:DMA(DirectMemoryAccess,直接内存存取,即不使用CPU拷贝数据到内存,而是DMA引擎传输数据到内存,用于解放CPU)引擎从磁盘读取index.html文件,并将数据放入到内核缓冲区。
象话
·
2023-12-20 00:46
Netty
NIO零拷贝
mmap和sendfile
零拷贝
sendFile
Netty学习笔记
1.NIO基础non-blockingio,jdk1.4后新增1.1三大组件1.1.1Channel读写数据的双向通道,可以用channel将数据从buffer中读出,也可以将buffer的数据写入channel,而java的Stream流要么输入要么输出,常用的Channel有SocketChannel、ServerSocketChannel、FileChannel1.1.2BufferBuff
只因我实在是太美
·
2023-11-28 02:45
学习
笔记
java
Netty学习笔记
(四)Netty概述及传统阻塞 IO 、Reactor 模式线程模型
原生NIO存在的问题1.NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。2.需要具备其他的额外技能:要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序。3.开发工作量和难度都非常大:例如客户端面临断连重连、网络闪
yangwen-bo
·
2023-11-08 15:55
后端开发
netty
java
多线程
Netty学习笔记
三-TCP粘包拆包
案例重现首先我们通过具体的case重现一下TCP粘包的过程我们模拟下故障场景,客户端循环一百次调用服务端传输报文,服务端接收报文并打印接收报文和计数,同时根据报文回应客户端服务端代码publicclassTimeServerHandlerextendsChannelHandlerAdapter{privateintcount;@OverridepublicvoidchannelRead(Chann
无聪帅
·
2023-10-30 01:10
【
netty学习笔记
八】IdleStateHandler心跳检测机制
在节点通信时,经常需要心跳机制来探测对方是否是存活的。在netty中,IdleStateHandler就能提供这种心跳检测功能。让我们先看看例子:服务端添加的handler.childHandler(newChannelInitializer(){@OverridepublicvoidinitChannel(SocketChannelch)throwsException{ChannelPipeli
月落亦莫离
·
2023-10-28 23:14
Netty学习笔记
文章目录1Netty2BIO1、介绍2、工作机制3、应用实例4、问题分析3NIO1、介绍2、BIOvs.VIO3、NIO三大核心原理4、Buffer缓冲区5、Channel通道6、Selector选择器7、NIO网络编程应用实例-群聊系统8、NIO与零拷贝9、AIO4Netty1、概述2、高性能架构设计3、Netty模型4、异步模型5、核心模块6、实例:群聊系统7、实例:心跳检测机制8、实例:We
倩mys
·
2023-10-02 18:03
Java
学习
笔记
Netty学习笔记
(二)——netty组件及其用法
1、Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。原生NIO存在的问题1)NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。2)需要具备其他的额外技能:要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非
给我来一杯可乐
·
2023-09-27 12:47
学习
java
jvm
服务器
网络
用Java的BIO和NIO、Netty实现HTTP服务器(一) BIO与绪论
计算机网络引论》[2]《计算机网络安全引论》[3]《NIO学习笔记(一)初遇》[4]《Socket简介和I/O多路复用》[5]《NIO学习笔记(二)相识篇》[6]《NIO学习笔记(三)甚欢篇》[7]《
Netty
·
2023-08-15 16:46
javahttp
Netty学习笔记
四-序列化
上一节学习了Netty的TCP拆包粘包问题的解决之道,今天学习Netty的序列化。什么是序列化引入百科:序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象Java的序列化Java原生API提供了对象的输入输出流ObjectIntputStre
无聪帅
·
2023-08-10 13:53
Netty学习笔记
五-LengthFieldBasedFrameDecoder源码分析
上一节中提到了对象反序列化解析器ObjectDecoder,ObjectDecoder是继承自LengthFieldBasedFrameDecoder,LengthFieldBasedFrameDecoder是Netty通用的拆包器LengthFieldBasedFrameDecoder用法LengthFieldBasedFrameDecoder源码解释中是这么说的:通过长度域lengthFiel
无聪帅
·
2023-07-29 15:34
Netty学习笔记
(三)Reactor线程模型
单线程模型所有操作都在同一个NIO线程处理,在这个单线程中要负责接收请求,处理IO,编解码所有操作,相当于一个饭馆只有一个人,同时负责前台和后台服务,效率低。单线程模型多线程模型多线程的优点在于有单独的一个线程去处理请求,另外有一个线程池创建多个NIO线程去处理IO。相当于一个饭馆有一个前台负责接待,有很多服务员去做后面的工作,这样效率就比单线程模型提高很多。多线程模型主从线程模型多线程模型的缺点
云师兄
·
2023-04-21 05:43
Netty学习笔记
六-ByteBuf学习
背景Java自带的NioByteBuffer具有局限性和操作的复杂性,主要缺点如下:1、ByteBuffer长度固定,一旦分配成功长度不能动态扩展和缩容,很容易发生越界异常。2、ByteBuffer只有一个标识位置的指针,读写切换时需要手工调用flip方法为了弥补这些不足,Netty作者重新造轮子,提供了自己实现的ByteBuf。ByteBuf原理ByteBuf也是通过字节数组byte[]作为缓冲
无聪帅
·
2023-04-15 18:50
Netty学习笔记
文章目录二、Netty入门2.1、概述2.1.1、Netty是什么?2.1.2、Netty的作者2.1.3、Netty的地位2.1.4、Netty的优势2.2、HelloWorld2.2.1、目标2.2.2、服务器端2.2.3、客户端2.2.4、流程梳理提示2.3、组件2.3.1、EventLoop优雅关闭演示NioEventLoop处理io事件handler执行中如何换人?演示NioEventL
渣渣苏
·
2022-12-01 04:50
学习笔记
Netty
NIO
netty学习笔记
io.nettyPART1Netty——异步和事件驱动1.netty概述Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。在网络编程领域,Netty是Java的卓越框架。它驾驭了Java高级API的能力,并将其隐藏在一个易于使用的API之后。Netty使你可以专注于自己真正感兴趣的——你的应用程序的独一无二的价值。2.netty特性非阻塞网
silverbo1
·
2022-11-19 00:46
netty
netty
java
Netty学习笔记
(一)
NIO介绍字节流入门案例importlombok.extern.slf4j.Slf4j;importjava.io.FileInputStream;importjava.io.IOException;importjava.nio.ByteBuffer;importjava.nio.channels.FileChannel;@Slf4jpublicclassTestByteBuffer{public
Xiaoweidumpb
·
2022-08-22 08:44
#
Netty网络编程
学习
java
jvm
Netty学习笔记
之线程模型【上】
大家好,我是爪哇小白2021。半路出家的程序员,在从事开发之前在某省测绘院玩了一年的飞机,机缘巧合之下发现了更有趣的事情,从此步入了编程的世界…ps:同时也是一个热爱旅行的航拍小能手!目的:记录自己的学习历程,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流NettyNetty对JDK自带的NIO的API进行了良好的封装,解决了上述问题。且Netty拥有高性能、吞吐量更高,延迟更低,减少资
爪哇小白2021
·
2022-02-21 09:28
Netty
rpc
java
分布式
张龙
netty学习笔记
P52 executor
线程工厂常规的线程逻辑是用Runnable或者Thread创建线程,然后调用start()。这个做法的缺点是,线程的行为和线程的创建绑定到了一起。所以最好是将线程的创建与它的任务解耦。ThreadPerTaskExecutor命令模式ThreadFactoryDefaultThreadFactoryExcutorSerialExecutorNioEventLoopGroup首先给出其类层次图跟踪N
不存在的里皮
·
2022-02-03 04:27
Netty编解码开发+多协议开发和应用+源码+高级特性笔记免费送
今天分享的这份
Netty学习笔记
从JavaNIO讲起,再到Netty编解码开发,再到Netty多协议开发和应用,然后到Netty功能介绍和源码分析,最后讲述
java码农之路1
·
2021-07-16 10:43
netty
大数据
java
人工智能
编程语言
Netty学习笔记
NIOpublicclassNIOServer{/*标识数字*/privateintflag=0;/*缓冲区大小*/privateintBLOCK=4096;/*接受数据缓冲区*/privateByteBuffersendbuffer=ByteBuffer.allocate(BLOCK);/*发送数据缓冲区*/privateByteBufferreceivebuffer=ByteBuffer.al
MccreeFei
·
2021-06-19 21:52
Netty学习笔记
:PoolChunk的内存分配策略
关键数据结构image.png对照上图,我们看一下相关数据结构PooledArena代表内存中一块连续区域,其内部有2个重要的数据结构tinySubpagePools/smallSubpagePools小于8KB的内存申请,优先从tinySubpagePools/smallSubpagePools数组中申请内存。如果subPages数组为空,则从PoolChunk申请内存。PoolChunkLis
王白告龙
·
2021-06-09 21:39
Netty学习笔记
(二)Channel的分类
Channel分类在Netty中存在众多Channel类和接口,大致关系如下:Netty中Channel类图Channel:和JavaNio中的Channel同名,是Netty对网络底层读写和连接的抽象。AbstractChannel:是Channel的抽象实现类,抽象出了parent,id,unsafe,pipeline等概念。AbstractNioChannel:封装JavaNIO,通过Sel
云师兄
·
2021-05-10 00:14
Netty学习笔记
(四)NioEventLoopGroup分析
引子在上一篇文章中我们已经分析了Netty注册相关的逻辑,接下来再开看下NioEventLoopGroup这个类内部的相关构造。NioEventLoopGroup在之前的demo中第一行就是:EventLoopGroupbossGroup=newNioEventLoopGroup(1);这个NioEventLoopGroup类的构造函数最终实现如下:protectedMultithreadEven
云师兄
·
2021-05-01 17:43
Netty入门教程2——动手搭建HttpServer
上一篇:
Netty学习笔记
1——认识Netty在上一章中我们认识了netty,他有三大优点:并发高,传输快,封装好。
追那个小女孩
·
2021-04-28 23:24
Netty学习笔记
(1)
一、Netty介绍Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端,例如zookeeper、阿里的dubbo等。Netty的主要特性如下所示(吐槽下MD的表格。。):分类Netty的特性设计统一的API,支持多种传输类型;阻塞的和非阻塞的简单而强大的线程模型;真正的无连接数据报套接字支持;链接逻辑组件以支持复用易于使用详实的Javadoc和大
斯文遮阳
·
2021-04-19 08:08
Netty学习笔记
(二)
原生NIO存在的问题:NIO的类库和API繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要具备其他的额外技能:要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序。开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读
dev_winner
·
2021-04-13 00:23
Netty学习笔记
(一)初遇篇
本篇的学习需要懂NIO的知识,不懂的可以参看下面的文章:NIO学习笔记(一)初遇NIO学习笔记(二)相识篇Socket简介和I/O多路复用NIO学习笔记(三)甚欢篇除此之外,还需要大概懂一点网络协议,比如HTTP。开始之前这里我们在复习一下简单的复习NIO的三个重要的核心知识点,Selector(选择器)、Channel(通道)、Buffer(缓冲区)。这三个概念是从I/O多路复用抽象而来,网络通
·
2021-02-09 21:44
Netty学习笔记
(一)初遇篇
本篇的学习需要懂NIO的知识,不懂的可以参看下面的文章:NIO学习笔记(一)初遇NIO学习笔记(二)相识篇Socket简介和I/O多路复用NIO学习笔记(三)甚欢篇除此之外,还需要大概懂一点网络协议,比如HTTP。开始之前这里我们在复习一下简单的复习NIO的三个重要的核心知识点,Selector(选择器)、Channel(通道)、Buffer(缓冲区)。这三个概念是从I/O多路复用抽象而来,网络通
·
2021-02-09 21:01
Netty学习笔记
15 Netty Attribute使用
Attribute用来在channel上记录数据。操作写示例AttributeKeysrcdataAttrKey=AttributeKey.valueOf("srcdata");byte[]mydata=newbyte[msg.readableBytes()];AttributesrcdataAttr=ctx.channel().attr(CloudConstants.srcdataAttrKey
谢厂节_编程圈
·
2020-09-17 14:18
#
Java-Netty专栏
netty学习笔记
title:“
netty学习笔记
”date:2019-04-03tags:[“netty”]categories:后台Channel底层网络传输API必须提供给应用I/O操作的接口,如读,写,连接,绑定等等
jiang_anwei
·
2020-09-15 12:36
后台
netty
Netty学习笔记
系列之六:多种通讯协议支持
通讯协议,指的是把Netty通讯管道中的二进制流转换为对象、把对象转换成二进制流的过程。转换过程追根究底还是ChannelInboundHandler、ChannelOutboundHandler的实现类在进行处理。ChannelInboundHandler负责把二进制流转换为对象,ChannelOutboundHandler负责把对象转换为二进制流。接下来要构建一个Server,同时支持Pers
it_monkey_ali
·
2020-09-15 10:48
java
Netty学习笔记
之一(Netty解析简单的Http Post Json 请求)
一,HTTP解码器可能会将一个HTTP请求解析成多个消息对象。ch.pipeline().addLast(newHttpServerCodec());ch.pipeline().addLast(newParseRequestHandler());经过HttpServerCodec解码之后,一个HTTP请求会导致:ParseRequestHandler的channelRead()方法调用多次(测试时
weixin_34392435
·
2020-09-14 21:26
Netty学习笔记
之一(Netty解析简单的Http Post Json 请求)
一,HTTP解码器可能会将一个HTTP请求解析成多个消息对象。ch.pipeline().addLast(newHttpServerCodec());ch.pipeline().addLast(newParseRequestHandler());经过HttpServerCodec解码之后,一个HTTP请求会导致:ParseRequestHandler的channelRead()方法调用多次(测试时
weixin_33958366
·
2020-09-14 20:25
Netty学习笔记
阻塞与同步1)阻塞(Block)和非租塞(NonBlock):阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候阻塞:往往需要等待缞冲区中的数据准备好过后才处理其他的事情,否則一直等待在那里。非阻塞:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经准备好,也直接返回2)同步(Synchronization)和异步(A
_杰升
·
2020-08-26 23:50
netty学习笔记
文章目录五种I/O模型netty各大组件详解echo服务EventLoop和EventLoopGroupBootstraptChannelChannelHandler、ChannelPipline、ChannelHandlerContextChannelFuture编解码器编解码器的类型:编码器解码器什么是拆包和粘包问题(半包读写)半包读写解决方案LineBasedFrameDecoderDeli
weixin_43060721
·
2020-08-25 08:31
netty
Netty学习笔记
(五)--- ChannelHandler的执行顺序
在上一篇文章中,我们已经对ChannelHandler的执行顺序进行了介绍,一个I/O事件可以通过ChannelHandlerContext中的事件传播方法(如ChannelHandlerContext.fireChannelRead(Object)和ChannelHandlerContext.write(Object))传递到下一个类型相同的ChannelHandler上。下图取自Netty源码
Lincain
·
2020-08-23 00:29
Netty
Netty学习笔记
(四)--- ChannelHandler
在前面的文章中,通过对引导和线程的介绍,我们知道了如何配置、引导客户端和服务端程序,以及程序的线程模型。它们构建了应用程序运行的框架,但一个完整的网络应用程序还需要更多的内容,其中包括数据应该如何处理。Netty为此提供了一个强大功能组件ChannelHanlder接口,它允许用户自定义ChannelHandler的实现来处理传入和传出的数据。在一款网络应用程序中,数据应该是其中最重要的部分,其他
Lincain
·
2020-08-23 00:29
Netty
Netty学习笔记
(六)--- ByteBuf
所有的网络通讯都涉及到数据的交互,数据的交互本质上就是字节序列的移动。为了实现网络通信的高效性,我们通常需要一个缓冲区来存储这些字节序列。在NIO中我们使用ByteBuffer作为它的字节容器,但是这个类的方法使用起来过于复杂,在日常的编程工作中显得有些繁琐。Netty为此提供了一款替代ByteBuffer的的组件:ByteBuf,它既解决了JDKAPI的局限性,又为网络应用程序的开发者提供了更好
Lincain
·
2020-08-23 00:29
Netty
Netty学习笔记
(二)--- Bootstrapping
在上一篇文章的Echo应用程序案例中,我们可以发现服务端和客服端都有一段引导代码。什么是引导呢,顾名思义,它就像一个调度员,将本来独立的各个组件引导到合适的位置,从而使整个系统能有序协调的运行。引导Bootstrapping是Netty对应用程序进行配置的过程,我们需要通过它来连接客户端和将服务端绑定到指定的端口上。它有两种类型:一种是用于服务端的ServerBootstrop,一种是用于客户端的
Lincain
·
2020-08-23 00:19
Netty
netty学习笔记
十、Selector、Channel、Buffer关系说明,NIO原理浅谈
一、Selector、Channel、Buffer关系1、每个Channel都会对应一个Buffer2、Selector对应一个线程,一个线程对应多个channel连接3、channel注册到selector4、程序切换到channel需要有事件决定Event是一个重要的概念。5、Selector会根据不同的事件,在各个通道上切换。6、buffer就是一个内存块,底层有一个数组byte[]hb;7
努力的阳光蓝孩
·
2020-08-21 20:17
【Netty】
Netty学习笔记
—IO模型
netty是一个流行的NIO的框架,它的健壮性、性能、功能都特别的好。既然是一个NIO的框架,那么今天就来聊一聊IO模型。BIO模型在网络编程中,基本的模型也就是常见的Client/Server模型,这也就是常见的两个进程之间的相互通信。也非常的简单,服务端暴漏自己的ip和端口,客户端通过地址信息向服务端发起连接请求,经过三次请求的握手进行建立连接,如果连接成功,双方就可以开始进行通信。上面就是传
LuckyZhouStar
·
2020-08-21 17:06
Java学习
netty学习笔记
相关接口/类//baseChannelHandlerchannelHandler;ChannelHandlerAdapterchannelHandlerAdapter;//inbound和outbound的接口和adapterChannelInboundHandlerchannelInboundHandler;ChannelInboundHandlerAdapterchannelInboundHa
马彬彬
·
2020-08-21 16:44
♚java♚
netty 学习笔记一:感受 IO编程 NIO编程 与 Netty 编程
netty学习笔记
一:感受IO编程NIO编程与Netty编程代码和注释:https://github.com/christmad/code-share/tree/master/share-netty/src
HOLD ON!
·
2020-08-21 03:48
netty
张龙
netty学习笔记
P7 P8 P9
概要P7实现了客户端与服务端的连接(但没有发送信息)P8实现了聊天室,主要用到了对连接、断开连接的事件处理,以及用ChannelGroup实现广播P9实现了空闲状态监测(可用于心跳包监测)netty的独特规范struts2、spring等都是遵循servlet规范的,但netty基于更为底层的协议,可以不遵循servlet。由于netty的精妙设计,它拥有比tomcat更大的吞吐量,很适合高并发场
不存在的里皮
·
2020-08-18 23:18
Netty学习笔记
二十、Netty任务队列Task了解以及Netty再了解
一、用户自定义任务//用户自定义任务该任务提交到scheduleTaskQueue中ctx.channel().eventLoop().schedule((()->{try{Thread.sleep(10*1000);}catch(Exceptione){System.out.println("发生异常"+e.getMessage());}ctx.writeAndFlush(Unpooled.co
努力的阳光蓝孩
·
2020-08-18 01:38
【Netty】
Netty学习笔记
摘要援引
netty防止内存泄露:https://blog.csdn.net/gt9000/article/details/88206340里面还提到了一点:畸形码流攻击:如果客户端按照协议规范,将消息长度值故意伪造的非常大,可能会导致接收方内存溢出。代码BUG:错误的将消息长度字段设置或者编码成一个非常大的值,可能会导致对方内存溢出。这些,也都是需要我考虑拦截的。避免内存泄漏的策略如下:无论采用哪种解码器
Stephanie_1
·
2020-08-16 23:15
Java
NetWork
FrameWork
网络
java
Netty
Netty学习笔记
14 使用Netty-SocketIO 实现简单聊天室程序
Netty-SocketIO网址:https://github.com/mrniko/netty-socketio。Netty-SocketIO是一个开源的、基于Netty的、Java版的即时消息推送项目。Socket.IO除了支持WebSocket通讯协议外,还支持许多种轮询(Polling)机制以及其它实时通信方式,并封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码。Socket.
谢厂节_编程圈
·
2020-08-15 04:16
Java-Netty专栏
上一页
1
2
3
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他