文件与IO流
File类
File类表示文件和目录名
File类可以实现文件的创建、删除、重命名、得到路径、创建时间等
File类操作方法
public static final String separator 表示路径分隔符“\”
public File(String pathname) 构造File类实例,要传入的路径
public boolean createNewFile() 创建新文件
public boolean isDirectory() 判断给定的路径是否是文件夹
IO流
输入输出流(Input/Output)
字符流
OutputStream
InputStream
字节流
OutputWriter
InputReader
缓冲流
缓冲流的好处是能够更高效的读写信息
BufferedInputStream
BufferedOutputStream
BufferedReader
BufferedWriter
打印流
字节打印流PrintStream
字符打印流PrintWriter
打印流可以很 方便的进行输出
对象流
ObjectOutputStream类实现对象的序列化
ObjectInputStream类实现反序列
字节数组流
ByteArrayInputStream
ByteArrayOutputStream
数据流
跟具数据类型的大小来读取
dataInputStream
dataOutputStream
字符串流
StringWriter
StringReader
IO包中的类
RandomAccessFile:有强大的文件读写功能,其内部是大型byte[],可以通过seek(),getFilePointer()等方法操作的指针,方便对数据进行写入和读取。还可以的基本数据类型进行直接的读和写操作
大多数功能已经被nio的内存映射文件(memory-mapped files)给取代了。
装饰者模式
适用于支持每一种组合将生产大量的子类,使得子类数目呈爆炸性增长。另一种可能是因为类定义被隐藏,或类定义不能用于生成子类。
类图
Component(被装饰对象基类)
定义对象的接口,可以给这些对象动态增加职责;
ConcreteComponent(具体被装饰对象)
定义具体的对象,Decorator可以给它增加额外的职责
Decorator(装饰者抽象类)
维护指向Component实例的引用,定义与Component一致的接口;
ConcreteDecorator(具体装饰类)
具体的装饰对象,给内部持有的具体被装饰对象增加具体的职责;
常见的字符编码
常见编码有:ISO8859-1、GBK/GB2312、unicode、UTF。
iso8859-1
编码属于单字节编码,最多只能表示0--255的字符范围,主要在英文上应用
GBK/GB2312:
中文的国际编码,专门用来表示汉字,是双字节编码
unicode
java中就是使用此编码方式,也是最标准的一种编码方式,是使用16进制表示的编码。但此编码不兼容iso8859-1编码
UTF
由于uincode不支持iso8859-1编码,而且容易占用更多的空间,而且对于英文母也需要使用两个字节编码,这样使用unicode不便于传输和储存,因此产生了utf编码兼容了iso8895-1编码,也可以用来表示所有语言字符,不过utf是不定长编码,每个字符的长度从1——6个字节不等,一般在中文网页中使用此编码,因为这样可以节省空间
造成乱码的原因
程序使用的编码与本机的编码不一致
在网路中,客户端与服务端编码不统一
New IO
NIO
NIO的创建目的是为了让java程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作转移回操作系统,因而可以极大地提高速度。
流与块的比较
面向流的I/O系统一次一个字节地处理数据。面向流的I/O通常慢
面向块的I/O系统以块的形式处理数据。按块处理数据比按字节处理数据要快的多。但是面向块的I/O缺少一些面向流的I/O所具有的优雅性和简单性。
缓冲区
在NIO库中,所有的数据都是在缓冲区处理的。在读数据时,它直接读缓冲区中的。在写入数据时,它是写入缓冲区中的。任何时候访问NIO中的数据,您都是将它放到缓冲区中
缓冲区实质上是一个数组。通常它是一个字节数组,但也可以使用其他种类的数组。但是一个缓冲区不仅仅是一个数组。缓冲区提供了对数据的结构访问,而且还可以跟踪系统的读写进程
缓冲区类型
最常用的缓冲区类型是ByteBuffer.一个ButeBuffer可以在其底层字节数组上进行get/set操作(即字节的获取和设置)。
Char
Short
Int
Long
Float
Doudle
缓冲区内部细节
状态变量
position limit capacity
通道Channel
Channel是一个对象,可以通过它读取和写入数据。拿NIO与原来的I/O做个比较,通道就像是流
|