反射 Nio channel Buffer
1.反射
1.反射的简介
java的反射机制 在运行状态中 对于任意一个类 都能知道任意一个类的所有属性和方法
对于任意一个对象 都能够调用它的任意一个属性和方法
这种动态获取信息 以及 动态调用的方式 称为java的反射
"正" 先知道类 然后创建类对象 再去调用属性或者方法
"反" 先知道对象 然后找到类
Class类 是所有反射操作的源头
获取Class类的实例化对象 java中提供了三种获取该类对象的方式
1.Object类中的getClass()方法
2.Class c = 类名.class
3.Class类中的静态方法 forName(传入类名称字符串)
注意:
1.反射中所有的泛型 都是 ? 号
2.反射中方法的返回值 都是Object类型
2.反射的应用
T newInstance() 创建此 Class 对象所表示的类的一个新实例。
相当于 调用类的无参构造 完成对象的创建
Person p = new Person();
3.反射的四个类 Class Constructor Field Method
Class 代表 类的对象
Constructor 代表 构造器 对象
Field 代表 属性 对象
Method 代表 方法 对象
反射的使用步骤:
1.导包 java.lang.reflect
2.获取你想要操作的Class字节码对象
3.调用方法
4.操作信息
Constructor 构造器对象
1.无参构造
使用Class 类中的
newInstance()方法 创建该类对象
2.有参构造
使用Class类中的 获取Constructor构造器对象的方法
先获取构造器
Constructor<T> getConstructor(Class<?>... parameterTypes)
返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
然后再使用Constructor类中的
T newInstance(Object... initargs)
使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
Field 属性对象
1.被public修饰的属性
Field getField(String name)
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Field类中的
void set(Object obj, Object value)
将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
Object get(Object obj)
返回指定对象上此 Field 表示的字段的值。
2.所有的属性
Field getDeclaredField(String name)
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
Field 继承的方法
void setAccessible(boolean flag)
将此对象的 accessible 标志设置为指示的布尔值。
Method 方法对象
1.被public修饰的方法
Method getMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
Method类中的方法
Object invoke(Object obj, Object... args)
对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
2.所有的方法
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
4.通过反射越过泛型限定
2.NIO
1.NIO的简介
java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO
为所有的原始类型(boolean除外)提供了缓存支持
使用它 可以提供非阻塞式的高伸缩性网络
NIO由三个核心部分组成
Channel 管道/通道
Buffer 缓冲区
Selector 选择器
普通IO NIO
面向流 面向缓冲区
阻塞IO 非阻塞
没有选择器 选择器Selector
阻塞和非阻塞:
阻塞:
Scanner sc = new Scanner(System.in)
int i = sc.nextInt();
阻塞是强调运行结果
在返回之前 当前线程会被挂起 一直处于等待状态
不能执行其他任务
函数只有在得到结果之后 才会返回
阻塞式IO 指的是
"一旦输入/输出工作没有完成 则程序阻塞 直到输入/输出完成为止"
不见黄河不死心
非阻塞:
非阻塞和阻塞的概念是相对应的
非阻塞IO其实并非完全非阻塞
通常情况下 都是通过设置超时来读取数据的
未超时之前 程序阻塞
超时之后 程序结束
2.Channel,Buffer 和 Selector
基本上 所有的IO 在NIO中都是从一个Channel开始
Channel有点像流
数据可以从Channel读到Buffer中
也可以从Buffer写到Channel中
Channel:
通道 类似于流
通道 是双向的
流 是单向的
通道中的数据 先要存入Buffer中 或者 从Buffer中写出
通道与buffer进行数据交互
Java NIO中一些主要的Channel实现:
1.FileChannel : 从文件中读写数据
2.DatagramChannel : 能通过udp读写网络中的数据
3.SocketChannel : 能通过tcp读写网络中的数据
ServerSocketChannel :监听TCP连接
对每一个新进来的连接都会创建一个SocketChannel
Buffer:
缓冲区 本质上是一块可以存储数据的内存
把这块区域封装成了一个Buffer对象
Java NIO中涉及到的Buffer实现:
1.ByteBuffer
2.CharBuffer
3.DoubleBuffer
4.FloatBuffer
5.IntBuffer
6.LongBuffer
7.ShortBuffer
Selector:
实现监听的效果
通过一个线程管理多个Channel
从而管理多个网络连接的目的
它是Java NIO核心组件中的一个
用于检查一个或者多个NIO Channel的状态是否处于可读 可写
我们可以将Channle注册到Selector中 以实现Selector对其管理的目的
3.Buffer的使用
Java NIO 的Buffer 用于 和 NIO通道进行交互
数据从通道读入缓冲区
从缓冲区写出到通道中
常用方法:
1.allocate(大小) 分配一块指定大小的缓冲区
2.put() 向缓冲区写数据
3.get() 从缓冲区读数据
4.flip() 切换读写模式
作用:
* 1.将position设置为0
* 2.把limit设置为原position的值 存了多少数据
5.clear() 清空
6.capacity() 获取缓冲区大小
7.position() 获取数据存储位置
8.limit() 长度
使用步骤:
1.创建Buffer缓冲区
2.写入数据到Buffer
3.调用flip()方法 切换读写模式
4.从Buffer中读取数据
5.调用clear()方法 清空缓冲区
4.FileChannel的使用
java NIO 中的FileChannel 是一个连接文件的通道
可以通过通道 读写文件
在使用FileChannel之前 必须先打开它
1.可以通过
FileInputStream/FileOutputStream 来获取 FileChannel
getChannel()方法
2.调用 FileChannel中的静态open()方法 打开通道
static FileChannel open(Path path,OpenOption...options);
Paths 工厂类中 的方法
static Path get(URI uri) 将给定的URI转换为Path对象。
5.案例
写入文本文件
读取文本文件
复制图片
反射 Nio channel Buffer相关推荐
- java之NIO(Channel,Buffer,Selector)
java之NIO 1 什么是NIO Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API.NIO支持面向缓冲区的.基于通道的IO操作 ...
- NIO核心之Channel,Buffer和Selector简介
在NIO的API中,Channel就是实现非阻塞的组件,而事件分发(Dispatcher)使用的是Selector组件,在传统的I/O流(Stream)是有方向的,而NIO支持双向读写,这样就需要将流 ...
- java buffer nio_Java NIO之Buffer(缓冲区)入门
Java NIO中的缓存区(Buffer)用于和通道(Channel)进行交互.数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内 ...
- 03. Java NIO Channel 通道
2019独角兽企业重金招聘Python工程师标准>>> Java NIO Channel通道和流非常相似,主要有以下几点区别: 通道可以度也可以写,流一般来说是单向的(只能读或者写) ...
- 二、Java NIO Channel
一.Java NIO 网络编程 二.Java NIO Channel 三.Java NIO Buffer 四.Java NIO Selector 五.Java NIO 扩展组件 一.Channel 概 ...
- 【Netty】NIO 缓冲区 ( Buffer ) ( 缓冲区读写类型 | 只读缓冲区 | 映射字节缓冲区 )
文章目录 I . 缓冲区 ( Buffer ) 存取类型 II . 只读缓冲区 ( ReadOnlyBuffer ) III . 映射字节缓冲区 ( MappedByteBuffer ) I . 缓冲 ...
- NIO:channel、buffer、状态变量、socket、charset
在开始之前 关于本教程 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的.NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的.面向块的 I/O.通过定义包含数据的 ...
- Java NIO:Buffer、Channel 和 Selector
Buffer 一个 Buffer 本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据. java.nio 定义了以下几个 Buffer 的实现,这个图读者应该也在不少地方见过了吧 ...
- buffer java作用_Java NIO之Buffer的使用
目录 Buffer简介 Buffer的核心属性 Buffer的创建与使用(ByteBuffer为例) 总结 参考资料 Buffer简介 缓冲区(Buffer):本质上是一个数组,用于临时保存.写入以及 ...
最新文章
- python 操作txt 写入列表
- java如何把查到的对象集合放入 展示对象list中_Java面试整理-基础篇8.集合1
- 三十六、【减小apk包的体积】
- iOS开发——获取本设备IP
- 2018-2019-2 20165222《网络对抗技术》Exp9 Web安全基础
- 一道『easy』等级的力扣题,我写了两个小时的笔记...
- 惯导IMU,INS,AGV的区别
- C#——NotifyICON的使用
- how to use 1checker_vim command
- keil软件是干嘛的?keil软件怎么用?
- 云计算的特点,主要有哪些?
- timenote时光笔记+android,Time Note时光笔记软件怎么样?Time Note时光笔记有哪些功能特色?...
- Vscode 修改左侧 资源管理器的面板大小
- 高等数学(第七版)同济大学 总习题十一 个人解答
- 使用与破解ExcelVBA密码
- VRTK插件详解四:部分自带案例分析
- 浙江大学SEL实验室
- SVN的学习(SVN的简单说明、SVN的安装与配置、SVN与GIT的区别)
- ETL开发流程小记(1)
- VScode 浅灰色主题