Java IO(3)

回顾:
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才可能自动强制输出。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值