读书人

黑马软件工程师_ 关于标准输入输出流的

发布时间: 2013-04-07 12:50:11 作者: rapoo

黑马程序员_ 关于标准输入输出流的一些深入讨论

------- android培训、java培训、期待与您交流! ----------

当我们在java中使用标准输入输出流的时候,也就是system.out和system.in的时候

它们分别对应的是控制台和键盘,system.out我们经常使用,对于system.in却不是经常使用。。

在jdk中system.in是这样定义的

public staticfinal InputStream in

说明对应的流是一个InputStream的实例

也就是字节读取流对象

所以,我们可以这样去定义

InputStream in =system.in;

从而使用对应字节读取流的方法

int available()

返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。

voidclose()

关闭此输入流并释放与该流关联的所有系统资源。

voidmark(int readlimit)

在此输入流中标记当前的位置。

boolean markSupported()

测试此输入流是否支持 mark 和 reset 方法。

abstract int read()

从输入流中读取数据的下一个字节。

intread(byte[] b)

从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。

intread(byte[] b, int off, int len)

将输入流中最多 len 个数据字节读入 byte 数组。

voidreset()

将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。

longskip(long n)

跳过和丢弃此输入流中数据的 n 个字节。

所以,可以通过int a=in.read();去读取键盘录入的信息

而为什么在读取的时候如果定义

int a=in.read();

int b=in.read();

int c=in.read();

当你输入 一个字符后回车后,a,b,c都能得到值,这是因为在读取的时候

在window下是换行是‘\r’’\n’

所以读到的是这两个字符分别是 b 和c的值

当我们感觉上边的输入数据的方法是如此的繁琐的时候。

就想到了一个方法readLine.但是很不幸,这个方法是字符流的方法。

下边来说一下字符流和字节流的相互转化使用其各自的方法

在jdk中,我们找到了一个类

InputStreamReader

InputStreamReader正是字节流通向字符流的桥梁。

是我们可以将system.in转成一个字符流

代码如下:

InputStream in =System.in;

InputStreamReaderisr = new InputStreamReader(in);//完成了转化

这样我们就可以使用bufferedReader去装饰inputStreamReader

BufferedReader br = new BufferedReader(isr);

从而实现了使用BufferedReader的readLine();

而对于system.out来说,也一样,

OutputStream os = System.out;

OutputStreamWriter osw = new OutputStreamWriter(os);

BufferedWriter bw = new BufferedWriter(osw);

从而就可以使用BufferedWriter中的方法了


读书人网 >编程

热点推荐