Java编程基础及应用输入和输出
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运行该实例,在控制台输入字符串“Java程序设计基础”,程序 将接收该字符串并在控制台输出字符串信息。
12.3 字节流和字符流
OutputStream类是字节输出流的抽象类,定义了输出流的各种操 作方法。下面通过实例介绍如何使用OutputStream类向控制台输 出字符串信息。 例12.2 创建OutputStreamStr类,再类中创建OutputStream类的实例 对象out,并为其赋值为System类的out属性,该属性是控制台的输 出流,再定义一个字节数组,该数组包含将要输出到控制台的字 符串信息,并通过out对象在控制台输出该字节数组的内容。
12.2 输入流和输出流
Reader类是字符输入流的抽象类。所有字符抽象类的 实现都是它的子类。Reader类的具体层次结构如图12-4所 示。
BufferedReader BufferedInputStream
CharArrayReader Reader FilterReader
InputStreamReader PipedReader
12.1 流式输入/输出
从数据源中读取数据时,就是从数据源建立一个流, 然后从流中依次读取数据,如图12-1所示。
数据源 数据通道
依次读取
应用程序
图12-1 输入流示意图
把数据写入到目的地时,就是在目的地端建立一个流 ,然后将程序中的数据依次写入,如图12-2所示。
应用程序
依次读取
数据通道
数据源
12.1 流式输入/输出
一个程序在运行期间通常要与外部设备交互,即从外 部设备获取信息或向外部设备发送信息,这就是输入/ 输出操作。 在JAVA语言中,一个可以读取字节序列对象被称为输 入流(input stream),输入流主要由InputStream和 Reader作为基类,一个可以写入字节序列的对象被称 为输出流(output stream),输出流主要由 OutputStream和Writer作为基类。
12.1.1 流的概念 12.1.2 输入流和输出流 (1)输入流 (2)输出流 12.1.3 字节流和字符流 (1)字节流 (2)字符流 12.1.4带缓存的输入和输出 (1)BufferedInputStream类和BufferedOutputStream类 (2)BufferedReader与BufferedWtiter类
Java编程基础及应用
第12章 输入和输出
第十二章 输入和输出
12.1 流式输入/输出 12.2 文件 12.3 随机存取文件 12.4 对象序列化 12.5 本章小结
第十二章 输入和输出
12.1 流式输入/输出 12.2 文件 12.3 随机存取文件 12.4 对象序列化 12.5 本章小结
12.1 流式输入/输出
LineNumberInputStream
InputStream ObjectInputStream PipedInputStream SequenceInputStream
PushbackInputStream
StringBufferInputStream
图12-3InputStream层次结构图
图12-2 输出流示意图
12.2 输入流和输出流Fra Baidu bibliotek
输入流 InputStream类是字节输入流的抽象类,是所有字节输入 流的父类。InputStream类的具体层次结构如图12-3所示。
ByteArrayInputStream BufferedInputStream FileInputStream DataInputStream FilterInputStream
public class WriterStr { public static void main(String[] args) { Writer out = new PrintWriter(System.out); try { char[] cs = "使用Writer输出流,在控制台输出字符串 \n".toCharArray(); out.write(cs); cs = "输出内容:".toCharArray(); out.write(cs); cs = " C#从入门到精通。".toCharArray(); out.write(cs);
public class ReaderStr { public static void main(String[] args) { InputStreamReaderreadin = new InputStreamReader(System.in); try { char[] css = new char[50]; readin.read(css); String str = new String(css); System.out.println("输入的字符串的内容:\t" + str.trim()); readin.close(); } catch (IOException e) {
12.3 字节流和字符流
Writer类是用于解决字符输出流的类,它的地位和作用与Reader类 在输入流的地位和作用是相同的,也是所有字符输出流的超类。 下面通过实例介绍如何使用Writer类的子类PrintWriter实现向控制 台输出字符串信息。 例12.4创建WriterStr类,在类中创建PrintWriter类的实例对象out, 并将其初始化为控制台的字符输出流,再定义一个字符数组,该 数组包含要输出到控制台的字符串信息,并通过out对象在控制台 输出该字符数组的内容。
12.3 字节流和字符流
字节流 字节流是面向字节的流,流中的数据以8位字节为单位 进行读写。它是抽象类InputStream和OutputStream的子类 。通常用于读写二进制数,如声音和图像。
下面通过实例介绍如何使用InputStream类从控制台获 取用户输入的字符串信息。
12.3 字节流和字符流
例12.1创建InputStreamStr类,在类中创建InputStream类的实例对 象ins,并为其赋值为System类的in属性,该类表示控制台输入流 ,从ins输入流中获取一些字节信息,用这些字节信息创建一个字 符串,并输出到控制台中。
public class InputStreamStr { public static void main(String[] args) { InputStream ins = System.in; try { byte[] bs = new byte[50]; inti = ins.read(bs); System.out.println("控制台输入的内容:" + new String(bs).trim()); ins.close(); } catch (IOException e) {
12.3 字节流和字符流
字符流 字符流是面向字符的流,用于处理字符数据的读取和 写入,它以字符(char)为单位。Reader类和Writer类是 字符流的抽象类,它们定义了字符流读取和写入的基本 方法,各个子类会依据其特点实现和覆盖这些方法。
12.3 字节流和字符流
Reader类是字符输入流的抽象类,定义了操作字符输入流的各种 方法。下面通过实例介绍如何使用Reader类的子类 InputStreamReader实现从控制台获取用户输入的字符串信息。 例12.3创建ReaderStr类,在类中创建InputStreamReader类的实例对 象rin,并将其初始化为控制台的字符输入流,从rin字符输入流中 获取一些字符信息到字符数组中,用来给字符数组创建一个字符 串,并输出到控制台中。
BufferWriter CharArrayWriter OutputStreamWriter Writer FilterWriter PipedWriter PrintWriter FilterWriter
StringWriter
图12-6 writer类的层次结构
12.2 输入流和输出流
这两个类中的所有方法均返回void,在遇到错误时会 引发IOException异常。下面对两个类中的方法做简单 的介绍。
12.2 输入流和输出流
输出流 OutputStream类是字节输出流的抽象类,此抽象类是表 示输出字节流的所有类的超类。OutputStream类的层次结 构如图12-5所示。
ByteArrayOutputStream
FileOutputStream OutputStream FilterOutputStream
ObjectOutputStream PipedOutputStream
BufferedOutputStream DataOutputStream
PrintStream
图12-5 OutputStream类的层次机构
12.2 输入流和输出流
Writer类是字符输出流的抽象类,所有字符输出类的实 现都是它的子类。Writer类的层次结构如图12-6所示。
(1)write(int b):将制定的字节写入此输出流。 (2)writer(byte[] b):将b.length个字节从指定的byte数组写入此输 出流。 (3)write(byte[] b,intoff,intlen):将指定的byte数组中从偏移量off开 始的len个字节写入此输出流。 (4)flush():彻底完成输出并清空缓存区。 (5)close():关闭输出流。
public class OutputStreamStr { public static void main(String[] args) { OutputStream out = System.out; try { byte[] bs = "使用OutputStream输出流,在控制台输出字符串 \n".getBytes(); out.write(bs); bs = "输出内容:".getBytes(); out.write(bs); bs = " Java经典图书\n".getBytes(); out.write(bs); out.close(); } catch (IOException e) {
图12-4 Reader类层次结构
LineNumberInputStream
PushbackInputStream
12.2 输入流和输出流
这两个类中所有的方法遇到错误时都会引发 IOException异常。下面是对两个类中一些方法的简要 说明。
(1)read():从输入流中读取数据的下一个字节,返回0~255范围内的int字 节值。如果因为已经到达流末尾而没有可用的字节,则返回值为-1。 (2)read(byte[] b):从输入流中读入一定长度的字节,并以整数的形式返 回字节数。 (3)mark(intreadlimit):在输入流的当前位置放置一个标记,readlimit参数 告知此输入流在标记位置失效之前允许读取的字节数。 (4)reset():将输入指针返回到当前所做的标记处。 (5)skip(long n):跳过输入流上的n个字节并返回实际跳过的字节数。 (6)markSupported():如果当前流支持mark()/reset()操作,就返回true。 (7)close():关闭此输入流并释放与此流相关的所有系统资源。
12.1.4 带缓存的输入和输出流
BufferedInputStream类和BufferedOutputStream类
BufferedInputStream类可以对任何InputStream类进行带缓存区的 包装,以达到性能的优化。BufferedInputStream类有两个构造函数。 (1)BufferedInputStream(InputStream in); (2)BufferedInputStream(InputStream in, int size); 第一种形式的构造函数创建了一个带有32字节的缓存流;第二种 形式的构造函数按指定的大小来创建缓存区。从构造函数可以看出 ,BufferedInputStream对象位于InputStream类对象之前,图12-7描述 了字节数据读取文件的过程。