10、张龙netty学习 Java IO

Java IO

流类

  • 流的概念

    Java程序通过流来完成输入/输出。流是生产或消费信息的抽象。流通过Java的输入输出系统与物理设备链接。尽管与它们链接的物理设备不尽相同,所有的流行为具有同样的方式。这样,相同的输入/输出类和方法适用于所有类型的外部设备。这意味着一个输入流能抽象多种不同类型的输入,从磁盘文件,键盘或者网络套接字。同样一个输出流可以输出到控制台、磁盘文件或者相连的网络。流是处理输入/输出的一个洁净的方法,例如它不需要代码理解磁盘和网络的不同。Java中流的实现实在Java.io包定义的类层次结构内部。

  • 输入/输出类

    • 在java io包中提供了60多个类(流)。
    • 在功能上分为两大类:输入流和输出流。
    • 从结构上又可以分为字节流(以字节为处理单位或者面向字节)和字符流(以字符为处理单位或者面向字符)。
    • 字节流的输入流和输出流基础是InputStream和OutputStream这两个抽象类,字节流的输入输出操作由这两个类的子类实现。字符流是Java 1.1版本后新增的以字符为单位进行输入输出的流,字符流输入输出的基础是抽象类Reader和Writer.
  • 输入输出流概念

    • 输入输出时,数据在通信通道中流动,所谓数据流(Stream)指的是所有数据通信通道之中,数据的起点和终点。信息的通道就是一个数据流。只要输出据从一个地方流到另一个地方,这种数据流动的通道都可以称之为数据流。
    • 输入输出时相对于程序来说的,程序在使用数据时所扮演的角色有两个:一个是源,一个是目的。若程序是数据流的源,即数据提供者,这个数据流对程序来说就是一个输出流,若程序是数据的终点,这个数据流相对于程序来说是一个输入流。
  • 字节流和字符流

    • Java的原始版本 1.0 是不包含字符流的,因此所有的输入和输出都是以字节为单位的。Java 1.1版本增加了 字符流的功能。
    • 需要声明:在最底层,所有的输入、输出都是字节形式的,基于字符的流只为处理字符提供方便有效的方法。
  • 输入流

    读数据的逻辑为:open a stream -> while more information -> read information -> close the stream

  • 输出流

    写数据的逻辑为:open a stream - > while more information -> write information -> close the stream

  • 流的分类

    • 节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域
    • 过滤流:使用节点流作为输入输出,。过滤流是使用一个已经存在的输入流或者输出流创建的。
  • InputStream

    InputStream包含一套字节输入流需要的方法,可以完成最基本的从输入流读取数据的功能。当Java程序需要外设的数据时,可根据数据的不同形式,创建一个适当的InputStream子类类型的对象来完成与该外设的连接,然后再调用这个流类对象的特定输入方法来实现对相应外设的输入操作。

    InputStream类子类对象自然也继承了InputStream类的方法,常用的方法有:读数据的方法read(),获取输入流字节数的方法avaliable(),定位输入位置指针的方法skip(),reset(),mark()等。

在这里插入图片描述

  • OutputStream

    • 三个基本的写方法:abstract void write(int b) :往输出流中写入一个字节。 void write(byte[] b):往输出流中写入数组b中的所有字节。 void wirte(byte[] b,int off,int len):往输出流中写入数据组b中从偏移量off开始的len个字节的数据。 其它方法:void flush():刷新输出流,强制缓冲区中的输出字节被写出。void close():关闭输出流,释放和这个流相关的系统资源。

    • OutputStream 是定义了流式字节输出模式的抽象类。该类的所有方法返回一个void值并且在出错的情况下引发一个IOException异常。

    在这里插入图片描述

  • 过滤流

    在InputStream和OutputStream的子类中,FilterInputStream和FilterOutputStream 过滤流抽象类中又派生出DataInputStream和DataOutPutStream 数据输入输出流类等子类。

在这里插入图片描述

  • java IO库的设计原则

    • Java IO库提供了一个称作为链接的机制,可以将一个流与另一个流首位相连,形成一个流管道的链接,这种机制实际上是一种Decorator装饰设计模式的应用。
    • 通过流的链接可以动态增加流的功能,而这种功能的增加是通过组合一些流的功能而动态获取的。
    • 我们要获取一个IO对象,往往要产生多个IO对象,而装饰模式给我们提供了实现上的灵活性。

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
netty java.io.IOException: Connection reset by peer是指在使用netty框架进行网络通信时,发生了对等方断开连接的异常。这意味着连接的对方主动关闭了连接,或者由于某种原因导致连接被非正常地中断。这种异常通常出现在网络通信中,当一方试图向另一方发送数据时,对方已经关闭了连接。 这种异常可能有多种原因引起,其中一种常见的原因是连接超时或者网络延迟导致连接断开。另外,网络错误也可能导致连接被重置。例如,如果网络出现故障,连接可能会被重置以恢复正常的通信。 要解决这个异常,可以采取以下几个步骤: 1. 检查网络连接:确保网络连接是稳定的,并且没有其他网络问题,例如网络延迟或者丢包。可以通过ping命令测试网络连接。 2. 检查连接超时设置:如果发现连接超时导致连接被重置,可以尝试增加连接超时时间,以便允许更长的连接时间。 3. 检查连接状态:在代码中,可以通过判断连接的状态来避免发送数据到已经关闭的连接。可以使用isConnected()方法来检查连接是否仍然有效。 4. 处理异常情况:当出现连接重置异常时,可以根据具体情况采取适当的处理措施。例如,可以尝试重新建立连接,或者向用户显示错误信息。 总之,netty java.io.IOException: Connection reset by peer异常表示连接的对方已经关闭了连接或者由于其他原因导致连接中断。通过检查网络连接、连接超时设置、连接状态以及处理异常情况,可以解决这个异常。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [java.io.IOException: Connection reset by peer](https://blog.csdn.net/weixin_45631366/article/details/109543495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值