黑马程序员—IO流(上)字符流、字节流
来源:互联网 发布:tweenmax.js 百叶窗 编辑:程序博客网 时间:2024/05/16 16:59
----------android培训、java培训、期待与您交流!----------
1.字符流和字节流体系
2.字符流和字节流的区别
二者仅仅是操作单位不一样。
InputStream和Reader是所有输入流的基类,OutStream和Writer是所有输出流的基类,他们都是抽象类,本身不能创建实例,但是他们是所有输入流的模板。
一般来说处理字符或字符串时使用字符流,处理字节或二进制对象时应使用字节流;
字节流
字节流主要是操作byte(字节)的类型数据:
字节输出流:OutputStream
字节输入流:InputStream
字符流
Java中的字符是Unicode编码,是双字节的,1个字符 等于 2个字节;
使用字节来处理字符文本就不太方便了,此时可以考虑使用字符流;
字符流主要是操作char的类型数据:
字符输出流:Writer
字符输入流:Reader
字节流和字符流的区别
字节流和字符流在使用上的代码结构都是非常类似的,但是其内部本身也是有区别的,因为在进行字符流操作的时候会使用到缓冲区(内存中),而字节流操作的时候是不会使用到缓冲区的。
在输出的时候,OutputStream类即使最后没有关闭内容也可以输出。但是如果是Writer的话,则如果不关闭,最后一条内容是无法输出的,因为所有的内容都是保存在了缓冲区之中,每当调用了close()方法就意味着清空缓冲区了。那么可以证明字符流确实使用了缓冲区3.流的一般操作规律
抓住4个明确:
1:明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer。
2:操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3:当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
源设备:内存,硬盘。键盘
目的设备:内存,硬盘,控制台
4:是否需要而外功能,如缓冲区等
/*通过缓冲区复制一个.java文件。*/import java.io.*;class CopyTextByBuf{public static void main(String[] args) {BufferedReader bufr = null;BufferedWriter bufw = null;try{bufr = new BufferedReader(new FileReader("BufferedWriterDemo.java"));bufw = new BufferedWriter(new FileWriter("bufWriter_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("写入关闭失败");}}}}
4.转换流:
字节流-->字符流转换:
OutputStreamWriter:把字节输出流对象转成字符输出流对象
InputStreamReader:把字节输入流对象转成字符输入流对象
FileWriter和FileReader分别是OutputStreamWriter和InputStreamReader的直接子类,而不是Writer和Reader的直接子类,区别于FileInputStream 和InputStream。
class EncodeStream { public static void main(String[] args) throws IOException { //writeText(); readText(); // 用GBK编码,UTF—8解码,肯定会出现乱码 } public static void readText()throws IOException { InputStreamReader isr = new InputStreamReader(newFileInputStream("utf.txt"),"gbk"); char[] buf = new char[10]; int len = isr.read(buf); String str = new String(buf,0,len); System.out.println(str); isr.close(); } public static void writeText()throws IOException { OutputStreamWriter osw = new OutputStreamWriter(newFileOutputStream("utf.txt"),"UTF-8"); osw.write("你好"); osw.close(); } }
5.对象序列化
ObjectInputStream与ObjectOutputStream
class ObjectStreamDemo {public static void main(String[] args) throws Exception{//writeObj();readObj();}public static void readObj()throws Exception{ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));Person p = (Person)ois.readObject();System.out.println(p);ois.close();}public static void writeObj()throws IOException{ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));oos.writeObject(new Person("lisi0",399,"kr"));oos.close();}}
在调用ObjectOutputStream的writeObject方法时,对象需要实现Serializable接口,把一个类或者对象保存到文件必须用ObjectOutStream,这个javaBean需要实现些约来则啵接口。意义:序列化到本地存储,持久化存储,File是文件文件之间互写,ObjectOutputStream是对象和文件之间互写。
- 黑马程序员—IO流(上)字符流、字节流
- 黑马程序员——IO流-字节流、字符流
- 黑马程序员—IO流(字符流与字节流)
- 黑马程序员-------IO流(字节流,字符流)
- 黑马程序员——IO字符流与字节流
- 黑马程序员--IO(字符流、字节流)
- 黑马程序员——IO流(IO流、字节流、字符流)
- 黑马程序员——IO流(三)字节流、字符流、转换流
- 黑马程序员——Java中IO流(字节流 字符流 其他流 )
- 黑马程序员——IO(一)字符流,字节流,缓冲流,转换流
- 黑马程序员——Java基础----IO(概述、字符流、字节流等)(1)
- 黑马程序员-IO流 字符流与字节流
- 黑马程序员----------IO流字节流、字符流
- 黑马程序员——Java IO字符流、字节流(小练习)
- 黑马程序员---IO--字节流
- 黑马程序员——IO流之IO流概述、字符流、字节流
- 黑马程序员——IO字节流
- 黑马程序员——io字节流
- 公告
- flex布局
- NSNotificationCenter 的详细说明
- 算法导论笔记一:算法设计之分治法
- Unity3D 面试
- 黑马程序员—IO流(上)字符流、字节流
- 香港或国外服务器如何提高访问速度
- 基于Platinum库的DMS实现(android)
- hdu 2227 Find the nondecreasing subsequences【离散化+树状数组+DP思路】
- 这是我要走的路
- 自己写的QQ美女找茬外挂
- 主线程与子线程之间退出关系
- 用C#开发一个WinForm版的批量图片压缩工具
- Pollard's Rho Method