J2SE系列之IO流(不断更新)
来源:互联网 发布:兼职插画知乎 编辑:程序博客网 时间:2024/06/07 21:50
java的io部分主要的类或接口如下:
从上表可以看出主要有字节,字符,输入,输出,文件这几类,然后组合成 字节(字符)输入流,字节(字符)输出流,文件的输入输出均为随机存取文件类。
字节流和字符流的区别:
1.字节流单位为一个字节,字符流单位为一个Unicode码的长度,即2个字节长度,支持多国文字,因此若流要跨越多种平台传输,应使用字符流。
2.字节流无缓存,字符流有缓存。
3.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串。
4.字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
5.字节流直接操作文件,字符流操作缓冲区。
6.字节流使用后不许要关闭(最后关闭),而字符流必须关闭,否则会导致不能讲字符流中的内容全部读写。
字节流的输入与输出关系:
字符流的输入输出关系如下:
字节流与字符流之间的转换:
IO流相关的特殊需要:
1 、从 Stream 到 Reader,Writer 的转换类: InputStreamReader, OutputStreamWriter
2 、对象输入输出: ObjectInputStream, ObjectOutputStream
3 、进程间通信: PipeInputStream, PipeOutputStream, PipeReader, PipeWriter
4 、合并输入: SequenceInputStream
5 、更特殊的需要: PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader
决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):
首先,考虑最原始的数据格式是什么: 原则四
第二,是输入还是输出:原则五
第三,是否需要转换流:原则六第 1 点
第四,数据来源(去向)是什么:原则一
第五,是否要缓冲:原则三 (特别注明:一定要注意的是 readLine() 是否有定义,有什么比 read, write 更特殊的输入或输出方法)
第六,是否要格式化输出:原则二
java的IO相关类的父子关系如下:
java io流操作流程:
在Java中IO操作也是有相应步骤的,以文件操作为例,主要的操作流程如下:
1
2
3
4
IO操作属于资源操作,一定要记得关闭
例子:
读取文件,生成字节流,转换为字符流
/** * 保证按照 行 的 顺序得到文件的每一行数据 * @param fileName 文件名(路径) * @return list */public static List<String> readFile(String fileName){if(fileName==null){log.info("输入的文件地址为空 : 请输入正确的地址");return null;}List<String> result = new LinkedList<String>();BufferedReader reader = null;try { File file = new File(fileName); if(file!=null&&file.exists()){ //1.生成自己流,并使用buffer提高性能 BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file)); //2.转换为字符流,使用5M的缓冲 reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024);String tmp = null;int i=0;//3.读取while((tmp = reader.readLine()) != null){ result.add(i++, tmp.trim());}//4.关闭reader.close();reader = null; }else{ log.info(fileName+" 文件不存在 , 返回文件为空------"); } } catch (IOException e) {log.error("read file [" + fileName + "] fail!");}finally{if(reader!=null){try {reader.close();} catch (IOException e) {e.printStackTrace();reader = null;}reader = null;}}return result;}
参考资料:
字节流与字符流的区别详解
http://blog.sina.com.cn/s/blog_4080505a0101hff1.htmljava 字节流与字符流的区别
字节流与字符流转换
http://www.blogjava.net/yxhxj2006/archive/2013/08/08/402590.html
字节流和字符流的相互转换
http://www.cnblogs.com/hnrainll/archive/2012/03/22/2412455.html
字符流转换为字节流
http://blog.csdn.net/nercon233/article/details/3110004
Java IO流学习总结
http://www.cnblogs.com/oubo/archive/2012/01/06/2394638.html
- J2SE系列之IO流(不断更新)
- J2SE之IO流
- J2SE之IO流API
- J2SE基础夯实系列之IO(待更新)
- J2SE系列之递归
- J2SE之IO基础之一
- J2SE之IO基础--IO视图
- 11、J2SE基础-IO流
- J2SE之IO基础之二
- J2SE基础温习夯实系列之总纲
- J2SE基础夯实系列之异常体系
- J2SE基础夯实系列之数组
- J2SE基础夯实系列之JavaBean
- J2SE基础夯实系列之Enum枚举
- J2SE学习笔记--IO流
- 【J2SE归档总结】0x08 IO流
- J2SE中各种IO流整理
- J2SE基础:12.IO流编程
- makefile的详细讲解
- iOS之从手机中检索相片、视频
- Json的几种解析方法
- Android APK安装包瘦身
- Oracle存储空间管理
- J2SE系列之IO流(不断更新)
- Qtcreator 界面启动不了报错:Could not initialize GLX
- Bundle Plugin for Maven
- Oracle_使用bat命令执行sql命令文件
- linux sha256检验
- JNDI 是什么
- Hadoop数据库性能调优指南
- activity切换无动画效果的实现
- Maven使用心得