文档章节

I/O知识整理

w
 wangxhai
发布于 2016/11/25 13:10
字数 1186
阅读 13
收藏 0
点赞 0
评论 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

20180317插入排序-直接插入

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

im天行 ⋅ 03/17 ⋅ 0

Java8 HashMap实现原理探究

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

任杰LL ⋅ 2016/03/02 ⋅ 0

20180312折半查找

前置知识 + 需要将待查找的列表按关键字大小有序排序。 本期内容 名词解释 + 查找过程 实现 + 非递归的方式 总体评价 + 优点是比较次数少,查找速度快,平均性能好。+ 缺点要求待查表为有序表...

im天行 ⋅ 03/12 ⋅ 0

SQL 将一列多行数据合并为一行 FOR XML PATH

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

随智阔 ⋅ 2014/03/19 ⋅ 0

[unix]unix I/O知识

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

im天行 ⋅ 2013/03/17 ⋅ 0

Android基础巩固进阶

如何创建完美的单例模式? 设计模式在软件开发者中十分受欢迎。设计模式是对于常见软件问题的良好解决方案。单例模式是 Java 中创建型设计模式的一种。 单例类的目的是控制对象创建,约束对象...

掘金官方 ⋅ 2017/12/26 ⋅ 0

[掘金专题] Google I/O 2017 已经结束,我们该如何评价?

Google 到底有多重视 AI ? Google CEO 亲笔信:我们要让 AI 触手可及 Google CEO Sundar Pichai 亲自撰文,向大众阐释了 Google「AI-first」战略更大的「野心」。 你并没看懂的 Google I/O...

yikejiucai ⋅ 2017/05/17 ⋅ 0

python 爬虫 极客学院

coding: utf-8import requestsimport reimport sys reload(sys)sys.setdefaultencoding("utf-8") class Spider(object): self.urls = [] self.page = '0' def getPage(self, urlbase='http:/......

hyhlinux ⋅ 2016/06/11 ⋅ 0

Mysql配置参数innodb_buffer_pool_size的学习与整理

原文地址:Mysql配置参数innodbbufferpoolsize的学习与整理 这半个月来,一直在做一些关于服务器交易端性能的提升工作,主要是分析和讨论交易端性能的瓶颈,找出导致性能减慢的原因,拟定出合...

Realfighter ⋅ 2015/01/15 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 32分钟前 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部