文档章节

I/O知识整理

w
 wangxhai
发布于 2016/11/25 13:10
字数 1186
阅读 15
收藏 0

Java.io包中操作文件内容的主要有两大类:字节流、字符流 输出流:对象到目的地文件(写进文件) 输入流:已有文件到目的地对象(输进对象)

一、字节流和字符流综述:

  1. stream结尾都是字节流,reader和writer结尾都是字符流。
  2. 字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串
  3. InputStream,OutputStream主要处理二进制文件和字节流,Reader,Writer处理字符流(四个都是抽象类)
  4. 字符流操作才能使用缓冲区 Java中输入输出包含文本I/O和二进制I/O(下面对文本I/O只做简要笔记,二进制I/O中重要之处有注明以及代码)

二、文本I/O与二进制I/O综述:

  1. 文本I/O涉及编码和解码(机器自动进行的),而二进制I/O不涉及,所以二进制I/O更加高效
  2. windows的记事本以及Unix下的编辑器为文本文件,其他都为二进制文件
  3. 从计算机的角度来说,所有文件都是二进制文件
  4. 二进制文件与机器的编码方式无关所以它是可移植的
  5. 文本I/O在文件中以编码的形式保存,而二进制I/O在文件中以相同的字节保存

三、文本I/O

  1. File类:在程序中,如果使用绝对文件名,可能会降低程序的可移植性(比如Java和UNIX一样,以“/”作为目录分隔符,而在Windows系统中用的是”\”作为目录分隔符)
  2. 输入流Writer
  3. 输出流Rider

四、二进制I/O 1.输出流:InputStream 2. 输入流:OutputStream 注:以上两个是是二进制I/O类的根类 3. FileInputStream、FIleOutputStream、BufferedInputStream、BufferedOutputStream都没有引入新方法 4. 实例1——使用字节流复制文件: import java.io.*; public class ImageCopy { public static void main(String[] args) { //使用try-with-sourse语句块(资源中的子类型必须具备close()方法),可以自动关闭 try (FileInputStream fis=new FileInputStream(“2.jpg”); FileOutputStream fos=new FileOutputStream(“d:/JavaStudy/copy.jpg”)){ int flag=0; while((flag=fis.read())!=-1){ fos.write(flag); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } } 注: 如多是手动调用close方法,需要遵循先“打开的后释放”的原则 字符类型的,如txt文件,用字符流写入写出 5. DataInput(Output)Stream实现字节与基本类型或字符串之间的转换 6. 用EOFException也可判断文件是否到达末尾 catch (EOFException e) { System.out.println(“文件已到末尾”); } 7. BufferedInputStream:使用时,磁盘上的整块数据会一次性的读入到内存中的缓冲区,然后从缓冲区中将个别的数据传到程序中; BufferedOutputStream:使用时,个别的数据首先写入到内存中的缓冲区中,缓存区满后,缓冲区中的数据会一次性的写入到磁盘中 8. 如果没有指定缓存区的大小,默认为512个字节 9. 应该总是使用缓冲区I/O来加速文件的输入/输出(在大文件中,会看到实质性的性能提升) DataOutputStream output=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(“temp.dat”))); 10.实例2—命令行传参的文件复制 所用命令如下:Java Copy sourse target

对象I/O:ObjectInputStream和ObjectOutputStream类可用于读/写可序列化的对象 注:静态变量没有序列化 完全可以用ObjectInputStream和ObjectOutputStream类代替DataOutputStream和DataIntputStream类 ObjectInputStream和ObjectOutputStream类可以实现对象的输入和输出,从ObjectInputStream读取对象时,必须与其写入时的类型和顺序相同,所以为了得到需要的类型,必须使用Java安全的类型转换 Serializable接口 并不是每一个对象都可以写入到输出流,只有可序列化(serializable)的能够写入,Serializable接口是一个标记接口,没有方法 Java提供一个内在机制自动完成写对象的过程,这个过程称为对象序列化,在ObjectOutputStream中实现;读取过程称为反序列化,在ObjectInputStream中实现 如果一个对象是Serializable的实例,但是包含非序列化的实例数据域,可用transient关键字修饰,JVM会忽略这些数据域 如果一次对象不止一次写入对象流,就只存储序列号。读出这些对象时,它们的引用相同 五、随机访问文件 Java中RandomAccessFile类,允许文件从任意的位置进行数据读写 只读的或只写的都称为顺序流,顺序访问的文件不能更新 随机访问文件是由字节序列组成的,RandomAccessFile类可指定“r”和“rw”两种模式

© 著作权归作者所有

共有 人打赏支持
w
粉丝 0
博文 4
码字总数 2676
作品 0
资阳
私信 提问
Linux编程操作知识整理(continued)

前言:是自己对一种知识若干本的整合,当然是有主有次的,想尝试做下主题阅读方面的笔记。具体的内容整合到自己知识库里了。 一。文件I/O APUE里文件I/O讲的是“如何打开,读取,写入以及关闭...

im天行
2012/11/17
0
0
20180317插入排序-直接插入

前置知识 + 可以将插入排序看成两步操作 + 插入排序的基本思想就是将一条记录插入到一组已经有序的序列中,继而得到一个有序的、数据个数加1的新的序列。 本期内容 名词解释 + 直接插入排序将...

im天行
03/17
0
0
Java8 HashMap实现原理探究

前言:Java8之后新增挺多新东西,在网上找了些相关资料,关于HashMap在自己被血虐之后痛定思痛决定整理一下相关知识方便自己看。图和有些内容参考的这个文章:http://www.importnew.com/1659...

任杰LL
2016/03/02
254
0
SQL 将一列多行数据合并为一行 FOR XML PATH

FOR XML PATH 方法是用于将查询结果集以XML形式展示,这样展示方式的好处不言而喻。现在我要介绍的FOR XML PATH的“另类”用法。 首先,我们先来看看它的正常用法。下图是我们用到的一张TES...

随智阔
2014/03/19
0
0
[unix]unix I/O知识

0.UNIX输入输出基本概念 Q1.程序与文件建立连接或通信有几种机制?流与文件描述字有什么区别? Q2.打开文件的实质? 打开文件就是程序与文件之间建立连接或通信。 流的类型是FILE; 文件描述...

im天行
2013/03/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx中部署vue打包后的静态文件

如何在nginx中部署静态资源就不描述了, 请看我的这篇博客 将vue脚手架项目打包后的静态文件放到nginx上, 发现有个问题, 即url上有#, 怎么去掉这个#呢. 1 项目中router的mode 路由的mode要为h...

克虏伯
9分钟前
1
0
JS容易理解错误的地方

在这端代码执行的末尾,你会不会hi变量回事函数中的hi了?你会不会认为这不是按引用传递了? 对值传递和引用传递产生质疑了? 1 var hi = {};2 function sayHello(hi) { ...

器石_
10分钟前
0
0
Java开发学习--MongoDB

之前只学过sql,第一次使用非关系型数据库。以前对于关系型数据库与非关系型数据库的概念很模糊,通过这次的学习对这两者有了一个清晰的概念。 主键 在MongoDB中,主键名叫"_id",如果在生成...

微笑向暖wx
14分钟前
0
0
Java8-2-Lambda表达式实战-一句话实现Map中按照Value排序

今天我们来实战一把, 对Map的Value值排序进行简化. 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群...

编程SHA
17分钟前
0
0
Vue中img的src属性绑定与static文件夹

1、其中有一个叫做static的文件夹,尝试将logo.png放入这个文件夹,然后修改imgUrl: imgUrl = '/static/logo.png' 成功读取到了logo.png. 执行npm run build后查看dist文件,发现logo.png原...

小黑202
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部