[零基础学JAVA]Java SE应用部分-29.Java IO操作(03) 推荐
2009-02-28 23:12
776 查看
上季内容回顾:
字节流:InputStream、OutputStream
字符流:Reader、Writer
上季练习题:
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833917Z7yH.png)
既然是文件的拷贝,肯定要使用字节流,所以建立一个字节的输入流再建立一个字节的输出流,边读边写。
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833923Q2Oq.png)
看下效果:
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833927L171.png)
IO操作就是研究五个类一个接口
· File类
· OutputStream、InputStream
· Reader、Writer
· 对象序列化
管道流
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833930XOoc.png)
了解:管道流是管两个线程间通讯使的。
public void connect(PipedOutputStream src) throws IOException
把输出与输入连接在一起。
import java.io.*;
//设置两个线程,一个发送另一个接收
class Send implements Runnable{
private PipedOutputStream out = null;
//在构造方法中实例化此对象
public Send(){
this.out = new PipedOutputStream();
}
public void run(){
//启动线程,启动线程时直接发送
String str = "Hello World~~~";
try{
this.out.write(str.getBytes());
}catch (Exception e){}
}
//必须把管道输出流返回去
public PipedOutputStream getOut(){
return this.out;
}
}
class Receive implements Runnable{
private PipedInputStream input = null;
public Receive(){
this.input = new PipedInputStream();
}
public void run(){
//启动线程,接收内容
byte b[] = new byte[1024];
int len = 0;
try{
len = this.input.read(b);
this.input.close();
System.out.println(new String(b,0,len));
}catch (Exception e){}
}
public PipedInputStream getInput(){
return this.input;
}
}
public class IODemo01{
public static void main(String args[]){
Send s = new Send();
Receive r = new Receive();
//要把输出连接到输入上去哈~
try{
r.getInput().connect(s.getOut());
}catch (Exception e){}
new Thread(s).start();
new Thread(r).start();
}
}
看下效果:
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833933RLeM.png)
ByteArrayInputStream
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833938VZCH.png)
内存的输入、输出流
之前讲解的很多内容都是把内容直接输出到文件中去了,那么现在把内容输入到内存中,直接从内存中输出。
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833948tOoc.png)
看下有没变成大写哈~
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833949Rf2J.png)
应该按以下的方式理解:
· ByteArrayInputStream():理解为内存要读取
· ByteArrayOutputStream():从内存中输出
输入输出方法
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833953KBct.png)
System.out:
|- PrintStream是一个打印流,表示提供了更好的打印操作。
PrintStream有那些好处呢?
PrintStream是OutputStream的子类
实际上在IO中体现了一种设计模式 —— 装饰模式。
· 发现在OutputStream中的功能虽然可以输出,但是输出的过程不太好操作,因为所有的内容都要向byte数组转换。
PrintStream的基本原理
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833958roGc.png)
![](http://redking.blog.51cto.com/attachment/200902/28/27212_12358339617aYA.png)
PrintStream 中提供了比OutputStream 中更多的打印功能,可以输出任意的数据,也可以对输出的数据进行换行的处理。
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833965EZG0.png)
看下效果:在屏幕上换行是\n就可以了,在文件中换行是\r\n。
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833969KWVQ.png)
现在既然已经知道了PrintStream是OutputStream的对象,那么问?是否可以通过OutputStream完成向屏幕上输出的功能呢?可以使用对象多态性哈~~~
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833971ig5w.png)
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833972FY2H.png)
PrintStream 是一个字节的打印流,与它类似的还有一个PrintWirter字符的打印流,建议使用字节打印流是比较方便。
总结
1、System.out与OutputStream的关系
2、PrintStream实际上是JAVA装饰模式的应用,具有比父类提供更多更方便的功能
####################################################
字节流:InputStream、OutputStream
字符流:Reader、Writer
上季练习题:
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833917Z7yH.png)
既然是文件的拷贝,肯定要使用字节流,所以建立一个字节的输入流再建立一个字节的输出流,边读边写。
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833923Q2Oq.png)
看下效果:
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833927L171.png)
IO操作就是研究五个类一个接口
· File类
· OutputStream、InputStream
· Reader、Writer
· 对象序列化
管道流
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833930XOoc.png)
了解:管道流是管两个线程间通讯使的。
public void connect(PipedOutputStream src) throws IOException
把输出与输入连接在一起。
import java.io.*;
//设置两个线程,一个发送另一个接收
class Send implements Runnable{
private PipedOutputStream out = null;
//在构造方法中实例化此对象
public Send(){
this.out = new PipedOutputStream();
}
public void run(){
//启动线程,启动线程时直接发送
String str = "Hello World~~~";
try{
this.out.write(str.getBytes());
}catch (Exception e){}
}
//必须把管道输出流返回去
public PipedOutputStream getOut(){
return this.out;
}
}
class Receive implements Runnable{
private PipedInputStream input = null;
public Receive(){
this.input = new PipedInputStream();
}
public void run(){
//启动线程,接收内容
byte b[] = new byte[1024];
int len = 0;
try{
len = this.input.read(b);
this.input.close();
System.out.println(new String(b,0,len));
}catch (Exception e){}
}
public PipedInputStream getInput(){
return this.input;
}
}
public class IODemo01{
public static void main(String args[]){
Send s = new Send();
Receive r = new Receive();
//要把输出连接到输入上去哈~
try{
r.getInput().connect(s.getOut());
}catch (Exception e){}
new Thread(s).start();
new Thread(r).start();
}
}
看下效果:
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833933RLeM.png)
ByteArrayInputStream
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833938VZCH.png)
内存的输入、输出流
之前讲解的很多内容都是把内容直接输出到文件中去了,那么现在把内容输入到内存中,直接从内存中输出。
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833948tOoc.png)
看下有没变成大写哈~
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833949Rf2J.png)
应该按以下的方式理解:
· ByteArrayInputStream():理解为内存要读取
· ByteArrayOutputStream():从内存中输出
输入输出方法
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833953KBct.png)
System.out:
|- PrintStream是一个打印流,表示提供了更好的打印操作。
PrintStream有那些好处呢?
PrintStream是OutputStream的子类
实际上在IO中体现了一种设计模式 —— 装饰模式。
· 发现在OutputStream中的功能虽然可以输出,但是输出的过程不太好操作,因为所有的内容都要向byte数组转换。
PrintStream的基本原理
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833958roGc.png)
![](http://redking.blog.51cto.com/attachment/200902/28/27212_12358339617aYA.png)
PrintStream 中提供了比OutputStream 中更多的打印功能,可以输出任意的数据,也可以对输出的数据进行换行的处理。
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833965EZG0.png)
看下效果:在屏幕上换行是\n就可以了,在文件中换行是\r\n。
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833969KWVQ.png)
现在既然已经知道了PrintStream是OutputStream的对象,那么问?是否可以通过OutputStream完成向屏幕上输出的功能呢?可以使用对象多态性哈~~~
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833971ig5w.png)
![](http://redking.blog.51cto.com/attachment/200902/28/27212_1235833972FY2H.png)
PrintStream 是一个字节的打印流,与它类似的还有一个PrintWirter字符的打印流,建议使用字节打印流是比较方便。
总结
1、System.out与OutputStream的关系
2、PrintStream实际上是JAVA装饰模式的应用,具有比父类提供更多更方便的功能
####################################################
相关文章推荐
- [零基础学JAVA]Java SE应用部分-31.Java IO操作(05)IO操作实例讲解之实现简单MIS 推荐
- [零基础学JAVA]Java SE应用部分-28.Java IO操作(02) 推荐
- [零基础学JAVA]Java SE应用部分-30.Java IO操作(04) 推荐
- [零基础学JAVA]Java SE应用部分-27.Java IO操作(01) 推荐
- [零基础学JAVA]Java SE应用部分-25.多线程(03) 推荐
- [零基础学JAVA]Java SE应用部分-26.多线程(04) 推荐
- [零基础学JAVA]Java SE应用部分-24.多线程(02) 推荐
- [零基础学JAVA]Java SE应用部分-23.多线程(01) 推荐
- [零基础学JAVA]Java SE应用部分-35.JAVA类集之一 推荐
- [零基础学JAVA]Java SE应用部分-36.反射机制与工厂设计模式 推荐
- [零基础学JAVA]Java SE应用部分-22.Eclipse及正则表达式使用 推荐
- [零基础学JAVA]Java SE应用部分-33.Java数据库编程(JDBC)之一 推荐
- [零基础学JAVA]Java SE应用部分-34.Java常用API类库 推荐
- [零基础学JAVA]Java SE应用部分-32.Java网络编程 推荐
- [零基础学JAVA]Java SE应用部分-35.JAVA类集之三 推荐
- [零基础学JAVA]Java SE面向对象部分-15.面向对象高级(03) 推荐
- [零基础学JAVA]Java SE应用部分-33.Java数据库编程(JDBC)之二 推荐
- [零基础学JAVA]Java SE应用部分-35.JAVA类集之四 推荐
- [零基础学JAVA]Java SE面向对象部分-20.异常的捕获与处理 推荐
- [零基础学JAVA]Java SE面向对象部分-16.面向对象高级(04) 推荐