首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android面试题之Java网络通信基础知识

    网络通信基础 socket socket是应用层与TCP/IP协议族通信的中间软件抽象,操作系统把传输层一下的内容都包装了,应用层只需要用socket即可完成网络请求 Tcp是基于流;UDP是基于DatagramPacket...buffer = ByteBuffer.allocate(20000); 直接内存分配:分配速度会慢一点,网络通信会快一点,一般直接读写网络数据用这个 ByteBuffer buffer = ByteBuffer.allocateDirect...(20000); 把byte数组转换为Buffer ByteBuffer.wrap(bytes) Buffer的写 Channel向Buffer写:用Buffer的read方法,表示从网络读数据写到...Buffer 应用程序向Buffer写:用Buffer提供的各种put方法 Buffer的读 从Buffer读数据写到Channel:用Buffer的write方法,表示从Buffer读数据写到channel...而发送缓存里面只要还有空间可写,哪怕一个字节,就会触发OP_WRITE事件 OP_WRITE使用方式 用SelectionKey的isWritable判断是否有数据 Buffer用SelectionKey

    15510

    别大意,你可能还没掌握好Java IO

    如果用read()方法读取一个文件,每读取一个字节就要访问一次硬盘,这种读取的方式效率是很低的。即便使用read(byte b[])方法一次读取多个字节,当读取的文件较大时,也会频繁的对磁盘操作。...BufferedInputStream/BufferedOutputStream不直接操作数据源,而是对其他字节流进行包装,它们是 处理流。...ByteBuffer buffer = ByteBuffer.allocate(1024); ByteBuffer 的创建方式通常可以通过allocate()方法来指定大小创建。...不过,也可以使用 wray()方法将已存在的字节数组 "包装" 到 ByteBuffer 中。...这里我们用 ByteBuffer 来接收字节后就没有继续使用缓冲器来进一步操作,如果需要继续read() 的话,我们就必须得调用 clear() 方法来为每个 read() 方法做准备。

    53110

    不学无数 — Java 中 IO 和 NIO

    和 OutputStream 基于字符操作的 I/O 接口: Writer 和 Reader 基于磁盘操作的 I/O 接口: File 然后在各个接口下还有其各自的包装类,其运用到了装饰模式,为其增加一些功能...ByteBuffer 是唯一一个直接与通道交互的缓冲器——也就说,可以存储未加工字节的缓冲器。...当我们查看 ByteBuffer 源码时会发现其通过告知分配多少存储空间来创建一个 ByteBuffer 对象,并且还有一个方法选择集,用于以原始的字节形式或者基本数据类型输出和读取数据。...byteBuffer =ByteBuffer.allocate(1024);while(in.read(byteBuffer)!...=-1){//做好让人读的准备byteBuffer.flip();out.write(byteBuffer);//清除数据byteBuffer.clear();        }    }复制代码 一旦要用从缓冲器中读取数据的话

    37110

    Java网络编程——NIO三大组件Buffer、Channel、Selector

    是所有缓存类的父类,对应实现有ByteBuffer、CharBuffer、IntBuffer、LongBuffer等跟ava基本数据类型对应的几个实现类: 一般最长用的就是ByteBuffer,创建...Channel Channel是对原 I/O 包中的流的模拟,到任何目的地(或来自任何地方)的所有数据都必须通过一个 Channel 对象,通道是双向的(一个Channel既可以读数据,也可以写数据),BIO中的InputStream.../OutputStream是单向的(InputStream/OutputStream只能读/写数据)。...当某个Channel注册到Selector上时,会包装一个SelectionKey(包含一对一的Selector和Channel)放到该Selector中,这些后面看源码的时候再仔细画图分析。...无论是服务端用来监听客户端连接的ServerSocketChannel,还是服务端和客户端用来读写数据的SocketChannel)及其感兴趣的事件(READ、WRITE、CONNECT、ACCEPT)包装成一个

    42910

    java 输入输出(学习笔记)

    使用处理流的一个明显好处是,只要使用相同的处理流,程序就可以采用完全相同的输入/输出代码来访问不同的数据源,随着处理流所包装节点流的变化,程序实际所访问的数据流也相应地发生变化。...使用处理流时的典型思路是,使用处理流来包装节点流,程序通过处理流来执行输入/输出功能,让节点流与底层的I/O设备、文件交互。...在使用处理流包装了底层节点流之后,关闭输入/输出流资源时,只要关闭最上层的处理流即可。关闭最上层的处理流时,系统会自动关闭被该处理流包装的节点流。...而且只有ByteBuffer才提供了alloacteDirect()方法,所以只能在ByteBuffer级别上创建直接Buffer。...Charset类也提供了如下方法: CharBuffer decode(ByteBuffer bb):将ByteBuffer中的字节序列转换成字符序列的便携方法。

    1.2K10

    Netty 异步的、事件驱动的网络应用程序框架和工具

    netty---ByteBuf 注释翻译 /** * ByteBuf是一个连续随机访问的bytes序列,是原始byte数组及ByteBuffer的顶层抽象。...* * 可读取的数据不足会抛出IndexOutOfBoundsException异常,新分配内存,包装或复制的buffer的 * readerIndex为0....除了没有readlimit变量,ByteBuf和InputStream具有相同的标记和和重置操作机制, * * 衍生buffer: * 通过调用ByteBuf的以下方法可以创建一个已知buffer...* * JDK byte array转换 * * Byte array * * 由byte数组(byte[])包装生成的ByteBuf,可以直接通过数据中的方法进行操作。...* * NIO Buffers * 如果一个ByteBuf可以被转换为NIO ByteBuffer,那么就可以通过nioBuffer的方法来操作ByteBuf。

    79830
    领券