黑马程序员_java基础_Day2(下)
来源:互联网 发布:企业数据库的数据来源 编辑:程序博客网 时间:2024/05/22 06:33
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
黑马程序员_java基础_Day2(下)
今天是2013年11月20日,为进黑马的第三篇博客!自己给自己加油!
主题:IO流
IO的三个知识点:
1,IO流用来处理设备之间的数据传输
2,java对数据的操作是通过流方式实现的
3,用于操作流的对象都在IO中
按流的方向可以分为两种:
1,输出流 2,输入流
按流的数据可以分为两种:
1,字节流 2,字符流
为什么要引入字符流?
无论什么数据都是二进制表示的,字节流完全可以搞定,但是其中有一部文本数据用字符流更加方便。
由于文本通过不同编码后,直接用字节流读文本可能会出现乱码,但是当我们用字符流时,他可以判断我们到底用的是何种编码,这里就避免读取时出现乱码。一句话就是字符流读取里面融合了编码表!
IO中的四个基类
字节流:
InputStream(读入),OutputStream(写出) 都是抽象类
字符流:
Reader(读入) Writer(写出)
由这四个类产生的子类
FileInputStream,FileReader,FileOutputStream,
FileWriter
flush(),close()的详解
Flush就是刷新内存中的内容,将其输出到文本,打个比方就是我们一般抽水,水是从管道里面到缸里的,out.flush()的作用就是将管道里的水放到缸里去。我们先将水放到管道里,再放到缸里,这样可以提高效率。如果我们拿一点水就放到缸里,这样效率就不高。
但是要注意没有reader.flush(),reader是将文本的内容写入内存,不需要再刷新内存。
Close,out与reader都有Close,注意凡是开启流的,都要将其关闭,
但是两者的close也有区别,out的close关闭资源前,先刷新内存。
但是reader关闭前不刷新内存,由于out写操作是临时存起来在缓冲区的。
Close的“来由”,在我们执行out.write时,java其实会调用系统的写入文件,java本身是不能执行写入文件操作的,因为window与linux的写方式不一样,java其实会调用系统的写入文件。
IO中的小细节
如下:
1,
Out.write(“abc”);
Out.flush();
out.write(“de”);
Out.flush();
2,
Out.write(“abc”);
Out.close();
out.write(“de”);
1,没有错,最后写入的是abcde,2,会出现异常,报错,因为当我们out.write(“de”);时,流已经关闭。
IO异常处理
1,当我们新建对象时
FileWrite fw=new FileWrite (“demo.txt”);
初始化同样调用系统资源,如在磁盘上新建文件,如果在新建过程中遇到异常,那么创建文件失败。
2,下面语句分析
Try
{
Fw.write(“abc”);
}
Finally{ fw.close(); }
当 Fw.write(“abc”);发生异常时,fw.close(); 就没有意义了。
为了避免这种情况,我们可以这样
Finally{
If(fw!=null)
fw.close();
}
细读文件的读与写
以前写过一篇关于java的读与写的博客,这里就不详述了,只是把其中新的理解写出来。
博客地址:http://blog.csdn.net/wohenai791515672/article/details/9180725
在读取的过程中,我们为什么要定义一个读取的字符。
如下:char[] buf=new char[3]
Int num=reader.read(buf);//注意这里每次读取3个字符出来。
当我们把它装为字符串时,new String(buf,0,num);
举一个例子:
假设文本中有“abcdefg”
每次读取三个字符放到buf中,
第一次读取了Int num=reader.read(buf);System.out.print(new String(buf,0,num));输出的是abc。
第二次读取了Int num=reader.read(buf);System.out.print(new String(buf,0,num));输出的是def。那么buf中就是def代替了abc
第三次读取了Int num=reader.read(buf);System.out.print(new String(buf,0,num));这时num=1,就剩一个字符g,把g放到buf[0]中,这时读取结束,但buf[1],buf[2]还在。输出结果是gef。
----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
- 黑马程序员_java基础_Day2(下)
- 黑马程序员_java基础_Day2(上)
- 黑马程序员_Java基础(下)
- 黑马程序员_java基础下
- 黑马程序员_Java基础_网络编程(下)_24
- 黑马程序员_Java编程基础下
- 黑马程序员_java基础
- 黑马程序员_java基础
- 黑马程序员_java 基础
- 黑马程序员_java基础
- 黑马程序员_Java基础
- 黑马程序员_java基础
- 黑马程序员_java基础
- 黑马程序员_java基础
- 黑马程序员_Java基础
- 黑马程序员_java基础
- 黑马程序员_java基础
- 黑马程序员_java基础
- php (十五)继承性
- Android平台开发-3G RIL模块分析
- 三种iOS多线程实现方法
- Btree dump
- ioctl 图片
- 黑马程序员_java基础_Day2(下)
- Android 启动加载jar包 init.rc BOOTCLASSPATH
- DNS配置(11G RAC)
- OpenGL ES之glFrontFace函数
- Astrill
- tomcat调优
- 查看端口占用情况
- OpenGL ES之glLightModel函数
- android 菜单的详细介绍