JAVA讲义第4章Word文档下载推荐.docx
- 文档编号:22664345
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:21
- 大小:39.08KB
JAVA讲义第4章Word文档下载推荐.docx
《JAVA讲义第4章Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《JAVA讲义第4章Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
read(byte[]);
//把指定个数的字节数据读入到一个字节数组中
read(byte[],intoff,intlen)//把len个字节的数据读入到一个字节数组中
一个程序在运行时通常要和外部设备交互,即从外部设备获取信息或向外部设备发送信息,这就是所谓的输入/输出(I/O)操作。
在Java语言中,输入/输出都是通过流(Stream)来完成的,这样程序无论是要进行输入还是输出,只要针对流进行操作就可以了。
简单地说,流就是指在计算机与输入/输出之间流动的数据序列。
序列中的数据既可以是二进制数据,也可以是其他符合某种格式规定的特定数据,如字符流序列等。
Java语言定义了字节流和字符流两种类型,并通过字节流类和字符流类实现输入/输出操作。
4.2字节流类
字节流提供了处理字节的输入/输出方法,如在读写二进制数据时就要使用字节流。
在Java语言中,字节流类用两个类层次定义,在顶层的是两个抽象类:
InputStream(输入流)和OutputStream(输出流)。
这两个抽象类派生出来的具体子类提供了读写各种不同设备如磁盘文件的功能。
4.2.1字节输入流类
字节输入流类的作用就是从外部设备获取字节数据到计算机内存中。
在编写应用程序时,常常需要定义字节输入流类的子类以及方法,才能够实现字节输入功能。
表4.1列出了字节输入流类派生的子类。
表4.1字节输入流的子类
名称
功能
AudioInputStream
读取声音字节流
ByteArrayInputStream
读取输入流到内存缓冲区
FileInputStream
读取文件输入流
FilterInputStream
建立可过滤的输入流
ObjectInputStream
读取对象并可以进行还原
PipedInputStream
建立输入流管道连接到输出流
SequenceInputStream
建立顺序输入流并逐个读取
表4.1中的FilterInputStream称为字节过滤输入流,是一个常用的字节输入流类,它把另一个输入流作为流的来源。
字节过滤输入流本身是一个抽象类,不能由它创建对象。
这个子类的功能又是通过它的4个子类来实现的,主要是为已有的某个输入流提供附加处理功能。
例如,用来设置或查询读取行数,把已读取的某个字节再退回去等,从而起到所谓的过滤作用。
表4.2列出了字节过滤输入流派生的子类。
表4.2字节过滤输入流的子类
DataInputStream
提供一些基于多字节的读取方法,从而可以读取基本类型的数据
PushInputStream
建立一种特殊的过滤流,它能提供把已读取的一个字节退回到输入流中去的方法
BufferedInputStream
为其他输入流增加功能,能够提高读取速度
LineNumberInputStream
建立带有行计数功能的过滤输入流
表4.3列出了抽象类InputStream中的方法,所有这些方法在发生错误时都会抛出IOException异常,而且这个抽象类定义的方法都可以被它们所有的子类继承使用。
表4.3字节输入流的主要方法
intread()
读取输入流的下一个字节,返回读入的字节数
intread(byteb[])
将输入流读到字节数组中,返回读入的字节数
intread(byteb[],intoff,intlen)
将输入流向字节数组的off处读取len个字节,返回读入的字节数
longskip(longn)
从输入流中跳过n个字节,返回跳过的字节数
abstractvoidclose()
关闭输入流,释放资源
【例4.1】接收键盘输入的字符串,并显示到屏幕上。
importjava.io.*;
//引入输入/输出程序包
publicclassGetInputStream//定义用户类
{
publicstaticvoidmain(Stringargs[])
intcount;
//定义读入字符数的变量
byteinput[]=newbyte[256];
//定义存放字节数据的数组
StringInputString;
DataInputStreamstdin=newDataInputStream(System.in);
//从键盘读取输入
BufferedInputStreambufin=newBufferedInputStream(stdin);
//创建输入缓冲区
try{
System.out.print("
请输入字符串,结束请按Enter...\n"
+"
==>
"
);
count=bufin.read(input);
//使用了表4.3中的第2种方法
System.out.println("
读入的字符数目:
+count);
InputString=newString(input,0,count);
输入的字符串为:
+InputString);
stdin.close();
bufin.close();
}
catch(IOExceptione){
System.out.println("
发生I/O异常!
"
}
程序运行结果如下:
请输入字符串,结束请按Enter...
北方电子工业有限公司
22
本例中使用了try——catch异常处理结构,try语句块中是一些可能产生异常的语句,catch语句块中是一些用来处理异常的语句。
当try语句块中的相关语句产生异常时,catch语句块会捕捉这个异常,并输出"
的提示信息。
异常处理的有关内容详见第6章。
该例中的第1行importjava.io.*;
是Java语言进行与输入输出操作有关的编程时需要导入的程序包,本章所涉及的类大都包含在该程序包中。
程序中在DataInputStream类的构造方法中指定参数为“System.in”,表示要从键盘读取用户输入的数据,创建BufferedInputStream类的对象则是用来提高输入输出的执行效率。
在Java语言应用程序中,经常会用到DataInputStream类和BufferedInputStream类的构造方法以完成输入操作。
DataInputStream类提供的构造方法如下:
DataInputStream(InputStreamin);
参数in为底层输入流,通常与一个具体的设备相关联。
该方法的功能是建立一个新的数据输入流以从指定的输入流读数据。
BufferedInputStream类提供的构造方法如下:
(1)publicBufferedInputStream(InputStreamin);
该方法的功能是创建一个缓冲输入流并保存在参数in中供以后使用。
同时也建立起来一个缓冲数组并保留在buf中(buf是缓冲输入流类的成员变量,是一个字节类型的数组,用于存储数据的内部缓冲区,在需要时它可以被另一个不同大小的数组替代)。
(2)publicBufferedInputStream(InputStreamin,intsize);
参数in为底层输入流,通常与一个具体的设备相关联,size为缓冲区大小。
该方法的功能是以指定的缓冲区大小创建一个缓冲输入流,并保存在参数in中供以后使用。
一个长度为size的内部缓冲区数组也建立起来并保存在buf中。
4.2.2字节输出流类
字节输出流类的作用就是将暂存在计算机内存中的数据输出到外部设备。
在编写应用程序时,常常需要定义字节输出流类的子类以及方法,才能够实现字节输出功能。
表4.4列出了字节输出流类派生的子类。
表4.4字节输出流的子类
ByteArrayOutputStream
将字节数据写入缓冲区
FileOutputStream
写入文件输出流
FilterOutputStream
建立可过滤的输出流
ObjectOutputStream
将对象原始数据类型写入输出流
PipedOutputStream
建立输出流管道连接到输入流
表4.4中的FilterOutputStream称为字节过滤输出流,它本身是一个抽象类,不能由它创建对象。
这个子类的功能又是通过它的3个子类来实现的。
这里的过滤,就是指将缓冲、打印转变为某种数据形式等的附加处理操作。
表4.5列出了字节过滤输出流派生的子类。
表4.5字节过滤输出流的子类
DataOutputStream
对这个过滤数据输出流可以写入任何符合Java数据类型的信息,这些信息可以被该类的方法读取
BufferedOutputStream
为输出流提供缓冲式过滤流,缓冲区大小可以通过入口参数指定,也可以固定为512字节
PrintStream
建立一个打印输出流,把符合Java数据类型的信息打印出来
表4.6列出了抽象类OutputStream中的方法,所有这些方法在发生错误时都会抛出IOException异常,而且这个抽象类定义的方法都可以被它们所有的子类继承使用。
表4.6字节输出流的主要方法
Voidwrite(intb)
将整数b的低8位写入输出流
Voidwrite(byteb[])
将字节数组写入输出流
Voidwrite(byteb[],intoff,intlen)
从字节数组的off处向输出流写入len个字节
abstractvoidflush()
强制将输出流保存在缓冲区中的数据写入终点
先调用flush然后关闭输出流,释放资源
【例4.2】接收键盘输入的内容,并通过字节输出流输出到屏幕上。
publicclassGetOutputStream
DataOutputStreamstdout=newDataOutputStream(System.out);
//从屏幕输出
BufferedOutputStreambufout=newBufferedOutputStream(stdout);
//创建输出缓冲区
PrintStreamp=newPrintStream(System.out);
//从屏幕输出
p.print("
p.println("
读入字符数:
bufout.write(input,0,count);
//写入位串流
bufout.flush();
//强制输出
p.close();
//关闭打印流
//关闭输入流
//释放输入缓冲区
stdout.close();
//关闭输出流
bufout.close();
//释放输出缓冲区
catch(IOExceptione){
该例使用字节数据输入流DataInputStream和字节打印流PrintStream将用户从键盘输入的字符串输出。
BufferedOutputStream类的flush()方法可以将流中的数据输出至指定的输出装置,而write方法仅仅是是将数据写入输出流中,并不会输出数据。
System.out是PrintStream类的对象,PrintStream类提供的print()和println()方法几乎可以显示所有数据类型的变量。
实际上,这里完全可以用System类的out.print()和out.println()来代替,二者的输出结果是相同的。
不同之处在于使用打印流的对象时,需要将打印流的输出流参数设置为System.out(向屏幕输出)。
该例中在DataOutputStream和PrintStream类的构造方法中指定参数为“System.out”,表示要将结果输出到屏幕上。
在Java语言应用程序中,经常会用到DataOutputStream类、BufferedOutputStream类和PrintStream类的构造方法,以完成输出操作。
DataOutputStream类提供的构造方法如下:
publicDataOutputStream(OutputStreamout)
参数out为底层输出流,通常与一个具体的设备相关联。
该方法的功能是建立一个新的数据输出流以写数据到指定的底层输出流中。
BufferedOutputStream类提供的构造方法如下:
(1)publicBufferedOutputStream(OutputStreamout)
该方法的功能是建立一个新的缓冲输出流以写数据到指定的底层输出流,其缓冲区大小默认为512字节。
(2)publicBufferedOutputStream(OutputStreamout,intsize)
参数out为底层输出流,通常与一个具体的设备相关联,参数size为缓冲区大小。
该方法的功能是以指定的缓冲区大小建立一个新的缓冲输出流,用于写数据到指定的底层输出流,
PrintStream类提供的构造方法如下:
PrintStream(OutputStreamout)
参数out为一个底层输出流,通常与一个具体的设备相关联。
该方法的功能是建立一个新的数据打印流以写数据到指定的底层输出流中。
4.3字符流类
字符流提供了处理字符的输入/输出的方法,它们使用Unicode码。
字符流也使用两个类层次定义,在顶层的是两个抽象类:
Reader和Writer。
Reader指字符输入流,用于输入,而Writer指字符输出流,用于输出。
从Reader和Writer派生出来的具体子类,它们才能对Unicode字符流进行操作。
字符流与字节流的区别在于前者是基于字符的操作,而后者则基于字节操作。
4.3.1字符输入流类
表4.7列出了字符输入流类派生的若干具体子类。
表4.8列出了字符输入流类中的方法,所有这些方法在发生错误时都会抛出IOException异常,而且这个抽象类定义的方法都可以被它们所有的子类继承使用。
表4.7字符输入流类的子类
字符流类
说明
BufferedReader
包含readLine()方法的缓冲输入字符流
FileReader
从文件读入的输入流
InputStreamReader
将字节翻译为字符的输入流
StringReader
从字符串读入的输入流
CharArrayReader
从字符数组读入的输入流
读到字符串的输入流
表4.8字符输入流类定义的方法
方法
功能说明
关闭输入流,如果试图继续读取,将产生一个IOException
从输入流读取一个字符。
如果到达文件结尾,则返回-1
intread(charbuf[])
从输入流中将指定个数的字符读入到数组buf中,并返回读取成功的实际字符数目。
abstractintread(charbuf[],intoff,intlen)
从输入流中将len个字符从buf[off]位置开始读入到数组buf中,并返回读取成功的实际字符数目。
booleanready()
判断流是否做好读的准备
longskip(longn)
跳过输入中的n个字节,返回实际忽略的字节数目
【例4.3】完成一个简单的学生信息录入程序。
publicclassTestReader
publicstaticvoidmain(String[]args)
intNum;
StringName[],classes[];
//定义字符输入流对象
InputStreamReaderstdin=newInputStreamReader(System.in);
BufferedReaderBufIn=newBufferedReader(stdin);
//定义字符读入缓冲区
System.out.println("
===学生信息==="
System.out.print("
请输入学生的人数:
Num=Integer.parseInt(BufIn.readLine());
//将读取的学生人数转换为整数
Name=newString[Num];
classes=newString[Num];
for(inti=0;
i<
Num;
i++){//完成学生信息的输入
System.out.println((i+1)+"
号"
System.out.print("
姓名:
Name[i]=BufIn.readLine();
//从键盘输入第i个学生姓名
班级:
//从键盘输入第i个班级名称
classes[i]=BufIn.readLine();
}
已完成学生信息输入!
\n"
===学生信息显示==="
i++){//完成学生信息的显示
System.out.print((i+1)+"
号"
+Name[i]);
System.out.println("
班级:
+classes[i]);
BufIn.close();
//释放缓冲区
}
===学生信息===
请输入人员的人数:
2
1号
宋菘菘
计算001
2号
李晓晓
多媒体001
===学生信息显示===
1号姓名:
宋菘菘班级:
2号姓名:
李晓晓班级:
该例使用字符输入流类及提供的方法来完成一个简单的学生信息录入程序。
该程序要求从键盘输入学生人数,然后依次输入每个学生的姓名和班级,最后将输入的学生信息全部显示在屏幕上。
程序中的BufIn是一个通过System.in连接到键盘的基于字符的输入流。
BufferedReader类是从字节输入流中读取字符,再将字符存入缓冲区内,以提供读字符、数组、行的有效方法。
缓冲区容量可以指定,也可以使用默认值。
B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 讲义
![提示](https://static.bdocx.com/images/bang_tan.gif)