黑马程序员———IO (Input Output)流

来源:互联网 发布:c语言的逗号表达式 编辑:程序博客网 时间:2024/05/17 07:50

——- android培训、java培训、期待与您交流! ———-
IO流四大基类:
字符流:Reader Writer
字节流: inputStream(读数据) outputStream(写数据)

1、IO流用来处理设备之间的数据传输。

2、Java对数据的操作是通过流的方式。

3、Java用于操作流的对象都在IO包中。

4、按流的数据单位分为两种:字节流与字符流。

5、按流的流向分为:输入流、输出流。

流操作的基本规律:通过三个明确来完成。

1明确源和目的。

源:输入流。InputStream,Reader

目的:输出流。OutputStream,Writer

2明确操作的数据是否是纯文本。

是:字符流。 不是:字节流。

3当体系明确后,再明确要使用哪个具体的对象
-通过设备来区分:
源设备:内存、硬盘、键盘。
目的设备:内存、硬盘、控制台。
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。如InputStream的子类FileInputStream。
关于缓冲流:
缓冲流要套接在相应的节流之上,提高了读写的效率
此处理流的构造方法都是传相应的基类类型
BufferedReader 提高了readLine 方法用于高效读取一行字符串;
BufferedWriter 提供了newLine 用于写入一个行分隔符也就是换行
缓冲区的出现时为了提高流的操作效率。所以在创建缓冲区之前,必须要先有流对象。缓冲区中提供了一个跨平台的换行符,newLine()。提供了一个一次读一行的方法 readLine(),方便于对文本数据的获取。当返回null 时,表示读到末尾。readLine方法返回的时候只返回回车符之前的数据内容,并不返回回车符。
转换流:
转换流主要作用将字节流转换成字符流。用处较大!
转换流在构造时可以指定其编码集合
InputStreamReader需要和InputStream套接
OutputStreamWriter需要和OutputStream套接

数据流:
数据流主要为实现可以存取Java原始数据类型如long,boolean。数据流是字节流
DataInputStream需要和InputStream套接
DataOutputStream需要和OutputStream套接
DataInputStream方法:readBoolean() readInt() read……()……
readUTF():网络传输常用方法 读一个Unicode字符串
DataOutputStream方法与DataInputStream基本对应为写的方法

打印流:
Print流只有输出流无输入流,PrintWriter和PrintStream分别针对字符字节
两个类提供了重载的Print和Println方法用于多种数据类型的输出
PrintWriter和PrintStream的输出操作不会抛出异常
PrintWriter和PrintStream有自动flush功能
—-System.setOut(接收OutputStream类):用于设置系统默认输出流

对象流:
等同于c#序列化,用直接将Object写入或读出
transient关键字为不序列化此成员变量
需要序列化的类必须实现Serializable接口
主要方法:writeObject(Object); readObject();
读出为Object类型需要强转数据类型

下面是一个通过字符流缓冲区拷贝文本文件的例子:
class CopyText
{
public static void main(String[] args)
{
BufferedReader bufr = null;
BufferedWriter bufw = null;
try
{
bufr = new BufferedReader(new FileReader(“Demo0.java”));
bufw = new BufferedWriter(new FileWriter(“E:\Demo0_copy.txt”));
String line = null;
while((line=bufr.readLine())!=null)
{
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
catch (IOException e)
{
throw new RuntimeException(“读写失败”);
}
finally
{
try
{
if(bufr!=null)
bufr.close();
}
catch (IOException e)
{
throw new RuntimeException(“读取关闭失败”);
}
try
{
if(bufw!=null)
bufw.close();
}
catch (IOException e)
{
throw new RuntimeException(“写入关闭失败”);
}
}
}
}
读取键盘录入

System.out:对应的是标准输出设备(控制台等)
System.in:对应的是标准输入设备(键盘)
键盘录入最常见的写法:BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
键盘录入实例
class ReadIn
{
public static void main(String[] args) throws IOException
{
/*InputStream in = System.in;
StringBuffer sb = new StringBuffer();
while(true)
{
int ch = in.read();
if(ch==’\r’)
continue;
if(ch==’\n’)
{
String s = sb.toString();
if(“over”.equals(s))
break;
System.out.println(s.toUpperCase());
sb.delete(0,sb.length());
}
else
sb.append((char)ch);
}*/
/下面是通过缓冲区优化后的代码/
InputStream in = System.in;
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bufr = new BufferedReader(isr);
String line = null;
while((line=bufr.readLine())!=null)
{
if(“over”.equals(line))
break;
System.out.println(line.toUpperCase());
}
bufr.close();
}

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

0 0
原创粉丝点击