大话 Java File I/O(与c++对比)
来源:互联网 发布:ipadmini2淘宝卖家 编辑:程序博客网 时间:2024/05/18 06:19
一起因:
(0)C里面就一个File文件指针,剩下的全部通过fopen(filepaht) ,和 fread() fclose()搞定;c++提供了fstream类(fistream fostream子类)其构造方法接收string型的filepath,就可以用fstream的成员函数操作该文件的读或者写,这比c方便了许多。Java里面的就更加复杂了,据说I/O读写类就有几十个,连我们一贯熟悉的File类仅仅提供一些文件硬盘级别的基本操作(是不是文件夹,文件?创建文件,得到所有的文件夹下的文件集合等等),如何代开和读取 需要FileInputStream类来实现字节流。详见 c++ fstream + string 处理大数据(与c 的fread)
(1)以字节为导向的 stream------InputStream/OutputStream;以字符为导向的 stream Reader/Writer;
InputStreamReader 和 OutputStreamReader :把一个以字节为导向的 stream 转换成一个以字符为导向的 stream
(2) --.InputStream、OutputStream 处理字节流的抽象类InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.
OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等.
--.InputStreamReader OutputStreamWriter 处理字符流的抽象类
InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.(转化工具,字节到字符)
OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流.
--.BufferedReader BufferedWriter
BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。(默认为大小为8092个char型字符(8KB)字符,即4k中文字符,大概4页左右的A4纸的文字量)
BufferedWriter 由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine使用平台自己的行分隔符,将文本写入字符输出流,缓冲各个字符,从 而提供单个字符、数组和字符串的高效写入。
二实战对比:
三种写法:
(1)File file = new File ("hello.txt");FileInputStream in=new FileInputStream(file);InputStreamReader inReader=new InputStreamReader(in);BufferedReader bufReader=new BufferedReader(inReader); (2)FileInputStream in=null;File file = new File ("hello.txt");in=new FileInputStream(file);// 这里会抛出异常的BufferedReader bufReader=new BufferedReader(new InputStreamReader(in)); /// 这种方法最常见了,而且规范一些,异常也可以处理(3)File file = new File ("hello.txt");BufferedReader bufReader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
上述写法的微小区别:
a)第二种方式中把“FileInputStream in=null;”定义单独放在开始处,说明下面应该还有要用到in对象变量的地方;(BufferedReader处用了)
b)第二种方式没有定义InputStreamReader的对象变量,直接在BufferedReader的构造函数中new一个,这种方式与第一种方式的主要区别:InputStreamReader对象只使用一次!这对于在这里,只需要使用一次,这个InputStreamReader对象的应用来说更好;无需定义InputStreamReader的对象变量,接收由new返回的该对象的引用,因为下面的程序中不需要这个InputStreamReader的对象变量,所以无需定义;所以这种情况下,第二种方式比第一种更好一些。
c)第三种方式中,典型的三层嵌套委派关系,清晰看出Reader的委派模式(《corejava》12章有图描述该委派关系),FileInputStream和InputStreamReader都没有定义变量,new生成的对象都只是使用一次。
d)三种方式的区别也就在于FileInputStream和InputStreamReader对象是否都只使用一次,是否需要定义它们的对象变量,以及个人的编码习惯。
e)但是要注意异常处理,FileInputStream(file)会抛出NotFileFoundException,如果采用surround方式(try&catch)处理,应该用第二种方式,这样可以用System.out.println提示文件未找到;当然在函数名后使用throws Exception,然后用第三种方式也行,但似乎这适合有用户界面的情况,把异常抛出在客户端在处理。
总之,建议使用第二种方法。
三:java中length,length(),size()区别
(1) java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.例如List ArrayList等的成员变量。
(2) java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.String 类的成员函数。
(3)java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看! ---- 以上三个在C++STL也通用
(4)实例验证:
public static void main(String[] args) { String []list={"mky","zyp","xl","ly"}; String a="mkyzypxlly"; System.out.println(list.length); System.out.println(a.length()); List<Object> array=new ArrayList(); array.add(a); System.out.println(array.size()); }
- 大话 Java File I/O(与c++对比)
- 【JAVA】File I/O
- innodb_flush_method 与 File I/O
- innodb_flush_method 与 File I/O
- innodb_flush_method 与 File I/O
- java File I/O 操作
- Java中Stream和NIO的Memory-mapped File的I/O性能对比
- File I/O 效率 C vs C++
- Java几种I/O模型对比
- innodb_flush_method 与 Linux File I/O
- MySQL innodb_flush_method 与 File I/O (Linux)
- java i/o 类之File
- java i/o 类之File
- [Java I/O系统]File类
- Java上路18-I/O-File
- java中I/O中的File类
- JAVA I/O(一) File类
- java I/O流-File类
- fatal error: call to undefined function curl_init() WAMP
- poj1001 高精度
- php开发之时间
- Oracle创建表空间、创建用户以及授权、查看权限
- Junit使用指南(一)
- 大话 Java File I/O(与c++对比)
- Junit使用指南(二)
- JAVA学习笔记(二十二)- 集合HashMap与Hashtable
- sublime text中添加diff跳转代码
- <犀牛书>注册文档加载完毕调用事件(可以早于load)
- CVS使用指南
- 常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全
- 字符串的基本操作
- mongoDB的地理位置索引