黑马程序员__IO(字节流)

---------------------- Android开发java培训、期待与您交流! ----------------------

字节流:

InputStream OutputStream

1、只支持字节层次上的读写,仅仅读取和写入单个的字节和字节数组。

	public abstract int read() throws IOException;  
//读取一个字节,并将其向上提升为int类型然后返回,如果读到数据源的末尾,则返回-1
	
	public abstract void write(int b) throws IOException  
//向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略

public int available()  throws IOException  //检查目前可以读取的字节数

//下面这段代码不会永远被阻塞:
int bytesAvailable = in.available()
if(bytesAvailable>0)
{
		byte[] data = new byte[bytesAvailable];
		in.read(data);
}


/*读取键盘录入:

System.out :对应的的是标准输出设备:控制台

System.in :对应标准输入设备:键盘

*/

InputStreamReader :字节流通向字符流的桥梁。

OuputStreamWriter:字符流通向字节流的桥梁;

键盘录入最常见写法:读取

BufferedReader bufr = new BufferedReader(newInputStreamReader(System.in));

控制台: 写入

BufferedWriter bufw = new

BufferedWriter(new OutputStreamWriter(System.out));

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

1、 明确源和目的;

源:读取流,输入流:InputStream ,Reader

目的:写入流,输出流,OuputStream ,Writer

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

是纯文本:字符流。

不是纯文本:字节流。

3、 体系明确后,再明确要使用的具体对象。通过设备进行区分;

源:键盘System.in 硬盘:FileStream 内存:ArrayStream

目的:控制台 System.out 硬盘: FileStream 内存:ArrayStream

/*实例:将一个图片文件复制到另一个文件中。*/

1、源:读取流,InputStream Reader

是否纯文本:否.使用字节读取流InputStream

设备:硬盘上的文件,InputStream体系中用来操作文件的对象FileInputStream

是否需要提供效率:是。加入InputStream体系中的缓冲区。

BufferedInputStream bufis = new
BufferedInputStream(new FileInputStream(“1.jpg”));

2、源:写入流,OuputStream,Writer

是否纯文本:否,使用字符流OutputStream.

设备:硬盘上的文件,OutputStream体系中用来操作文件的对象是FileOutputStream

是否需要提高效率:是,加入OutputStream体系中的缓冲区。

BufferedOutputStreambufos = new
BufferedOutputStream(new FileOutputStream(“2.jpg”));

/*实例:将一个键盘录入的数据保存到一个文件中。*/

1、 源:读取流,InputStream,Reader

是否纯文本:是,用Reader.

设备:键盘,使用System.in,用于System.in对应的是字节流,为了操作键盘的文本数据方便,因此需要使用转换流InpuStreamReader.

是否高效?是。加入Reader体系中的缓冲区BufferedReader

BufferedReaderbufr = new
BufferedReader(newInputStreamReader(System.in));


 

2、 目的:写入流,OutputStream,Writer;

是否纯文本:是。用Writer

设备:硬盘上的文件,Writer体系中用来操作文件的对象是FileWriter

是否高效?是。加入Writer体系中的缓冲区BufferedWriter

   BufferedWriterbufw = new
   BufferedWriter(new FileWriter(“1.txt”));

扩展知识:将录入的数据按指定的编码表存放到文件中。

目的:写入流,OuputStream,Writer

是否纯文本:是,用Writer.

设备:硬盘上的文件。Writer体系中用来操作文件的对象是FileWriter(默认的码表为GBK),但是由于存储时需要加入指定的编码表UTF-8,而编码表只有转换流可以指定,因此使用OuputStreamWriter,该转换流需要接收一个字节输出流OutputStream对象作为参数,可以操作文件的字节输出流对象是FileOutputStream.

是否高效?是。加入Writer体系中的缓冲区BufferedWriter

BufferedWriterbufw = new BufferedWriter
(newOutputStreamWriter(new FileOutputStream(“2.txt”)),”UTF-8”);

注:通常涉及到字符编码转换时需要用到转换流:

InputStreamReader ,OutputStreamWriter;
改变标准输入输出设备:

 static void setIn(InputStream in)

 static void setOut(PrintStream out);

异常日志信息的建立。

   Date d = new Date();

   SimpleDateFomat sdf = new SimpleDateFormat(“yyyy—MM-dd,HH:mm:ss”)

   String str = sdf.format(d);

   PrintStrean ps = new PrintStrean(“exception.txt”);

   ps.println(str);

   System.setOut(ps);


 

装饰设计模式:

当想要对已有的对象进行功能呢增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能,则自定义的类成为装饰类。

装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象的功能,提供更强的功能。

其与继承的区别:

装饰模式比继承要灵活,避免了集成体系的臃肿,同时降低了类与类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了增强功能。因此装饰类和被装饰类通常是都属于一个体系的。 

---------------------- Android开发java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值