System.out.println(String str); 向屏幕输出字符串str后换行 这两个语句已在前面各章的程序中多次使用。 3.标准错误输出System.err
System.err与System.out类似,主要是系统输出错误信息时使用。 【例9-1】
读取字节流,并显示。 import java.io.*;
public class Exam9_1 {
public static void main(String args[]) throws IOException{ int na=System.in.read(); //读取数据流
System.out.println(na); //按字符方式显示输入字符的Uncode码 } }
运行结果:
图9-4 System.in.read()方法使用
程序分析:
使用System.in.read()方法,只能读取第一个字符,读者朋友可多输入几个字符试一下。 【例9-2】
本例通过键盘输入字符,读入缓冲区中,显示出实际读入缓冲区的字节数,并以整数和字符两种方式输出缓冲的值。 import java.io.*;
public class Exam9_2{
public static void main(String args[]) throws IOException{
byte b[]=new byte[9]; //定义一个byte类型的数组b,用来做为缓冲区 System.out.println(\请输入:\
int nb=System.in.read(b); //取出输入字节数的长度,存放在整型变量nb中 System.out.println(\您输入的字符数为:\
for(int i=0;i<=nb-1;i++){ //输出缓冲区元素值 System.out.println(b[i]); }
System.out.print(\您输入的字符是:\
for(int i=0;i<=nb-1;i++){ //按字符方式输出
System.out.print((char)(b[i])); } } }
图9-5 从键盘输入字符
程序分析:
read方法在java.io包中,要抛出IOException异常,在上两例中由main 方法抛出,交由系统处理。
程序运行时,从键盘输入4个字符“abcd”,并按Enter键。保存在缓冲区中的实际字符个数为6,字符值是对应输入字符的ASCII码值,字符串结尾会自动加上回车和换行(“\\r \\n”)两个字符占用2字符。
9.2 字节流类
基本输入/输出类InputStream类,OutputStream类都是抽象类,不能实例化,因此在实际应用中并不使用这两个类,而是使用—些基本数据流类,他们都是InputStream类和OutputStream类的子类,在实现其超类方法的同时又定义了特有功能,用于不同的场合。
InputStream类和OutputStream类为通用的字节流类提供了一些基本方法和标准接口。
9.2.1 InputStream(字节输入流)类和OutputStream(字节输出流)类
1. InputStream类的常用方法 void close()
关闭此输入流并释放与该流关联的所有系统资源。 void mark(int readlimit)
在此输入流中标记当前的位置。 abstract int read()
从输入流读取下一个数据字节。
int read(byte[] b)
从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。 int read(byte[] b, int off, int len)
将输入流中最多 len 个数据字节读入字节数组。 void reset()
将此流重新定位到对此输入流最后调用 mark 方法时的位置。 long skip(long n)
跳过和放弃此输入流中的 n 个数据字节。
其中,abstract int read()方法为抽象方法。因为抽象类的功能和接口的功能非常类同,所以,InputStream类不仅为其他输入字节流子类提供了一些基本方法,还为它们提供了标准接口。InputStream类的子类重写了不同功能的read()方法。
2.OutputStream类的常用方法 void close()
关闭此输出流并释放与此流有关的所有系统资源。 void flush()
刷新此输出流并强制写出所有缓冲的输出字节。 void write(byte[] b)
将 b.length 个字节从指定的字节数组写入此输出流。 void write(byte[] b, int off, int len)
将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流。 abstract void write(int b)
将指定的字节写入此输出流。
OutputStream类的子类重写了不同功能的write(int b)方法。 3.异常的抛出
InputStream类和OutputStream类中的许多方法在调用时有可能出现异常,因此定义的这些方法都有throws IOException语句。
应用程序在调用这些方法时,可由系统进行异常处理,或由应用程序进行异常处理。
9.2.2 字节流类的常用子类及其应用
1.BufferedInuputStream类与BufferedOutputStream类 BufferedInuputStream类是InputSteam类的子类,BufferedOutputStream类是OutputStream类的子类。当这两个类的对象被创建时,就产生了一个内部缓冲数组,以提高效率。
利用BufferedInuputStream类创建的对象可以根据需要从连接的输入数据流中一次性读多个字节的数据到内部缓冲数组中,利用BufferedOutputStream类创建的对象可以从连接的输出数据流中一次性向内部缓冲数组中写多个字节的数据。
(1)BufferedInuputStream类的常用构造方法: BufferedInputStream(InputStream in)
创建 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。 BufferedInputStream(InputStream in, int size)
创建具有指定缓冲区大小的 BufferedInputStream,并保存其参数,即输入流
in,以便将来使用。
(2)BufferedOutputStream类的常用构造方法:: BufferedOutputStream(OutputStream out)
创建一个新的缓冲输出流,以将数据写入指定的基础输出流。
BufferedOutputStream(OutputStream out, int size)
创建一个新的缓冲输出流,以将具有指定缓冲区大小的数据写入指定的基
础输出流。
【例9-3】 让用户从键盘上输入一行字符串,在屏幕上输出显示该字符串。 import java.io.*;
public class Exam9_3{ void run(){ int num;
byte input[]=new byte[256]; //用于字节输入的缓冲数组
BufferedInputStream bin=new BufferedInputStream(System.in); //用键盘输入创建缓冲字节输入流对象bin
BufferedOutputStream bout=new BufferedOutputStream(System.out); //用屏幕输出创建缓冲字节输出流对象bout try{
System.out.println(\请输入:\
num=bin.read(input); //将键盘输入的字节放入数组input中
System.out.println(\您输入的字节个数为:\ System.out.println(\您输入的内容为:\
bout.write(input,0,num); //将数组input中的所有字节输出
bin.close(); //关闭缓冲字节输入流 bout.close(); //关闭缓冲字节输出流
}catch(IOException e){
System.out.println(\错误!\ } }
public static void main(String args[]){ Exam9_3 ee=new Exam9_3(); ee.run(); } }
程序分析:
(1)语句BufferedInputStream bin=new BufferedInputStream(System.in)表示用键盘输入(System.in)为参数创建缓冲字节输入流对象bin。要注意的是,从键盘输入的字符串结尾都会自动加上回车和换行(“\\r \\n”)两个字节,所以显示的字节数是输入的字节数再加2。
(2)语句BufferedInputStream bout=new BufferedInputStream(System.out)用屏幕输出(System.out)创建了缓冲字节输出流对象bout。
(3)缓冲字节输入流对象bin调用的是父类InputStream的close()方法,缓冲字节输入流对象bout调用的是父类OutputStream的close()方法。
(4)程序中对捕捉到的所有异常都只是输出了出错信息,并没有分类处理。
相关推荐: