回顾:
File
RandomAccessFile
OutputStream FileOutputStream
InputStream FileInputStream
Writer FileWriter
Reader FileReader
输入输出流:
预热:
one.计算机程序在执行时,要求被处理的数据必须加载到内存。因此,一方面需要由将位于内存中的数据保存到文件中,以便长期使用;另一方面需要将位于内存的数据加载到内存,以便计算机处理。
two.在文件中的数据只是一连串的字节或字符,并没有明显的结构。文件数据的内部结构需要有程序自己定义和处理。因此,Java语言将文件看做字节和字符序列的集合。组成文件的字节序列和字符序列分别被称为字节流或字符流。
three.Java语言将文件与标准输入或输出统一来进行处理。
Java语言提供了非常丰富的类来处理目录、文件及文件数据,主要在java.io包中,个别类在其他包中,如java.util.zip包主要对压缩文件进行处理。
开始:
1.java.io.ByteArrayInputStream类是输入流的一种实现,他包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。他有两个构造方法,都需要一个字节数组来作为数据源:
ByteArrayInputStream(byte[] buf)
创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
ByteArrayInputStream(byte[] buf, int offset, int length)
创建 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
int read()
从此输入流中读取下一个数据字节。
2.java.io.ByteArrayOutputStream类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
ByteArrayOutputStream()
创建一个新的 byte 数组输出流。
ByteArrayOutputStream(int size)
创建一个新的 byte 数组输出流,它具有指定大小的缓冲区容量(以字节为单位)。
byte[] toByteArray()
创建一个新分配的 byte 数组。
如果程序在运行过程中要产生一些临时文件,可采用虚拟文件方式实现,JDK中提供了以上这两个类可实现类似内存虚拟文件的功能。
public int read()从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。如果因为到达流末尾而没有可用的字节,则返回值 -1。
Character类中:
static char toLowerCase(char ch)
使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为小写。
全部在内存中完成的。
3.输入输出方法:
System类管理标准输入输出流和错误流。
System.out:把输出送到缺省的显示(通常是显示器)
System.in: 从标准输入获取输入(通常是键盘)
System.err:把错误信息送到缺省的显示
每当main方法被执行时,就自动生成上述三个对象。
源码如下:
public class IODemo14
{
public static void main(String args[]) throws Exception
{
// 通过子类完成不同的功能
OutputStream out = null ;
// System.out是PrintStream,是OutputStream子类
out = System.out ;
// 现在的out对象具备了向屏幕上打印内容的能力
String str = "HELLO MLDN --> LXH" ;
out.write(str.getBytes()) ;
out.close() ;
}
};
使用System.in为InputStream实例化之后,内容确实可以输出了,但是程序存在以下问题:
1.输入的内容受限制
2.如果输入的中文超过了容量,则可能出现乱码。
实际上在输入数据的时候更希望将全部输入的数据一次性读取进来,如果一次性读取,则肯定不会出现乱码问题。
要想实现上述功能,则需要将输入的数据放入到一个缓存之中。
BufferReader 此类在实例化时需要接受一个Reader的子类对象。
System.in → InputStream类型的 → 字符类型
InputStreamReader 将输入的字节改成字符
OutputStreamWriter 将输出的字符改成字节
这两个类是字节流和字符流之间装换的类。
文件(字节) →内存 →字符
完成两个功能:
输入两个数字,进行两个数字相加;
String → int 转换
4.System.out.println 向屏幕上打印信息。
PrintStream/PrintWriter 实际上是一个打印流,打印流比普通的OutputStream/Writer更爽。
PrintStream的良好特性:
1.包含可以用来直接输出多种类型数据的不同成员方法;
2.大部分成员方法不抛出异常;
3.可以选择是否采用自动强制输出特性。
PrintWriter的良好特性:
1.实现了java.PrintStream的所有paint成员方法,因此同上1。
2.同上2,如果检查是否有错误发生,可用public boolean checkError() 有错返回true。
3.自动强制输出与PrintWriter不同,只有调用了其成员方法println、printf或format才可能自动强制输出。