I/O

  • I/O技术是非常使用的技术,用于处理设备之间的数据传输。如果读写文件,网络通讯等。

流的分类

  • 按照数据单位的不同分为:字节流(8bit)、字符流(16bit)
  • 按照流向的不同分为:输入流、输出流
  • 按照流的角色不同分为:节点流、处理流(节点流以外的都是处理流)

主要抽象类

  • InputStream、OutputStream(处理图片、视频等数据;处理文本数据时会乱码)
    • 节点流
      • FileInputStream
      • FileOutputStream
    • 缓冲流
      • BufferedInputStream
      • BufferedOutputStream
  • Reader、Writer(处理文本数据)
    • 节点流
      • FileReader
      • FileWriter
    • 缓冲流(提升读写速度,内部提供缓存区,当缓存数据达到指定大小时才进行写入,减少写入次数)
      • BufferedReader
      • BufferedWriter

主要字符编码集说明

  • ASCII 美国标准信息交换码,用一个字节的7位可以表示
  • ISO8859-1 拉丁码表。欧洲码表,用一个字节的8位标识
  • GB2312 中国的中文编码表。最多两个字节编码所有的字符
  • GBK 中国的中文编码表的升级,融合了更多的中文文字符号。最多两个字节编码
  • Unicode 国际标准码,融合了目前人类使用的所有字符。为每个字符分配唯一的字符码。所有的文字都用两个字节来表示。
  • UTF-8 边长的编码方式,可用1-4个字节来表示一个字符

RandomAccessFile类

  • 我们可以用这个类来实现一个多线程断电下载的功能。用过下载工具的朋友都知道,下载前都会建立两个临时文件,一个是与被下载文件大小相同的空文件,另一个是记录文件指针的位置文件,每次暂停的时候,都会保存上一次的指针,然后断点下载的时候,会继续从上一次的地方下载,从而实现断点下载或上传的功能。

Java NIO

  • Java NIO(New IO,Non-Blocking IO)是从Java 1.4 版本开始引入的一套新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区(IO是面向流的)、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。
  • Java API中提供了两套NIO,一套是针对标准输入输出的NIO,另一套就是网络编程的NIO
    • |---- java.nio.channels.Channel
      • |---- FileChannel:处理本地文件
      • |---- SocketChannel:TCP网络编程的客户端的Channel
      • |---- ServerSocketChannel:TCP网络编程的服务器端的Channel
      • |---- DatagramChannel:UDP网络编程中发送端和接收端的Channel

NIO中Path

  • 早期的Java只提供了一个File类来访问文件系统,但File类的功能比较有限,所提供的方法性能也不高。而且,大多数方法在出错时仅返回失败,并不会提供异常信息。
  • NIO.2为了弥补这种不足,引入了Path接口,代表一个平台无关的平台路径,描述了目录结构中文件的位置。Path可以看成是File类的升级版本,实际引用的资源也可以不存在。

网络编程概述

  • Java是Internet上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序
  • Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在Java的本机安装系统里,由JVM进行控制。并且Java实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。

计算机网络

  • 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。

网络编程地目的

  • 直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯。

网络编程中有两个主要的问题

  • 如何准确地定位网络上一台或多台主机;定位主机上特定的应用
  • 找到主机后如何可靠高效地进行数据传输

如何实现网络中的主机互相通信

  • 通信双方地址
    • IP
    • 端口号
  • 一定的规则(网络通信协议。有两套参考模型)
    • OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广
    • TCP/IP参考模型:事实上的国际标准

网络通信协议

  • 计算机网络中实现通信必须有一些约定,即通信协议。对速率、传输u代码、代码结构、传输控制步骤、出错控制等制定标准

TCP/IP传输协议分层

  • 应用层:HTTP、FTP、Telnet、DNS...
  • 传输层:TCP、UDP
  • 网络层:IP、ICMP、ARP
  • 物理+数据链一层:Link

端口号

  • 端口号标识正在计算机上运行的进程
  • 不同的进程有不同的端口号
  • 被规定为一个16位的正数0~65535
  • 端口号分类
    • 公认端口:0~1023。被预先定义的服务通信占用
    • 注册端口:1024~49151。分配给用户进程或程序。
    • 动态/私有端口:49152~65535
    • 端口号与IP地址的组合得出一个网络套接字:Socket

TCP协议

  • 使用TCP协议前,必须建立TCP连接,形成传输数据通道
  • 传输前,采用“三次握手”方式,点对点通信,是可靠的
  • TCP协议进行通信的两个应用进程:客户端、服务端
  • 在连接中可进行大数据量的传输
  • 传输完毕,需释放已建立的连接,效率低

UDP协议

  • 将数据、源、目的封装成数据包,不需要建立连接
  • 每个数据报的大小限制在64K内
  • 发送不管对方是否准备好,接受方收到也不确认,故是不可靠的
  • 可以广播发送
  • 发送数据结束时无需释放资源,开销小,速度块