IO流(字节流)

IO流概述及其分类

** InputStream(字节输入流)和Reader(字符输入流)通俗的理解都是读(read)的。**
​
** OutputStream(字节输出流)和Writer(字符输出流)通俗的理解都是写(writer)的。 **
​
* 1.概念> IO流用来处理设备之间的数据传输> Java对数据的操作是通过流的方式> Java用于操作流的类都在IO包中> 流按流向分为两种:输入流,输出流。> 流按操作类型分为两种:> 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的> 字符流 : 字符流只能操作纯字符数据,比较方便。
* 2.IO流常用父类> 字节流的抽象父类:>> InputStream >> OutputStream> 字符流的抽象父类:>> Reader >> Writer
* 3.IO程序书写> 使用前,导入IO包中的类> 使用时,进行IO异常处理> 使用后,释放资源

FileInputStream

* read()一次读取一个字节
* FileInputStream fis = new FileInputStream("aaa.txt");   //创建一个文件输入流对象,并关联aaa.txtint b;                                                  //定义变量,记录每次读到的字节while((b = fis.read()) != -1) {                         //将每次读到的字节赋值给b并判断是否是-1System.out.println(b);                              //打印每一个字节}fis.close();

read()方法返回值为什么是int?

* read()方法读取的是一个字节,为什么返回是int,而不是byte
* > 因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111> 那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上> 24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型

文件的读写

* 文本文件的读写> 用FileInputStream和FileOutputStream读写文本文件> 用BufferedReader和BufferedWriter读写文本文件
* 二进制文件的读写> 使用DataInputStream和DataOutputStream读写二进制文件以及基本数据类型数据的读写
* 对象的读写> 使用ObjectInputStream和ObjectOutputStream读写对象(序列化与反序列化)

FileOutputStream

* write()一次写出一个字节
* FileOutputStream fos = new FileOutputStream("bbb.txt"); //如果没有bbb.txt,会创建出一个//fos.write(97);                        //虽然写出的是一个int数,但是在写出的时候会将前面的24个0去掉,所以写出的是一个bytefos.write(98);fos.write(99);fos.close();
** 1、前两种构造方法在向文件写数据时将覆盖文件中原有的内容 **
** 2、创建FileOutputStream实例时,如果相应的文件并不存在,则会自动创建一个空的文件 如果路径不存在则抛出找不到文件的异常 **

字节数组拷贝之available()方法

* int read(byte[] b):一次读取一个字节数组
* write(byte[] b):一次写出一个字节数组
* available()获取读的文件所有的字节个数
**  弊端:有可能会内存溢出   **

BufferedInputStream和BufferOutputStream拷贝

* A:缓冲思想> 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,> 这是加入了数组这样的缓冲区效果,java本身在设计的时候,> 也考虑到了这样的设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流
* B.BufferedInputStream> BufferedInputStream内置了一个缓冲区(数组)> 从BufferedInputStream中读取一个字节时> BufferedInputStream会一次性从文件中读取8192个, 存在缓冲区中, 返回给程序一个> 程序再次读取时, 就不用找文件了, 直接从缓冲区中获取> 直到缓冲区中所有的都被使用过, 才重新从文件中读取8192个
* C.BufferedOutputStream> BufferedOutputStream也内置了一个缓冲区(数组)> 程序向流中写出字节时, 不会直接写到文件, 先写到缓冲区中> 直到缓冲区写满, BufferedOutputStream才会把缓冲区中的数据一次性写到文件里
* D.小数组的读写和带Buffered的读取哪个更快?> 定义小数组如果是8192个字节大小和Buffered比较的话> 定义小数组会略胜一筹,因为读和写操作的是同一个数组> 而Buffered操作的是两个数组

flush和close方法的区别

* flush()方法> 用来刷新缓冲区的,刷新后可以再次写出
* close()方法> 用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出 

BufferedReader类

* 如何提高字符流读取文本文件的效率?> 使用FileReader类与BufferedReader类,BuffereReader类带有缓冲区,按行读取内容的readLine()方法
* 如何提高字符流写文本文件的效率?> 使用FileWriter类与BufferedWriter类,BufferedWrite类是Write类的子类,BufferedWrite类带有缓冲区

总结

* File 类用于访问文件或目录的属性
* 程序和数据源之间通过流联系> 输入流和输出流> 字节流和字符流> 节点流和包装流
* FileInputStream和FileOutputStream以字节流的方式读写文本文件。
* BufferedReader和BufferedWriter以字符流的方式读写文本文件,而且效率更高。
​
* FileInputStream  FileOutputStream  字节的输入输出流
* FileWriter FileReader 字符的输入输出流
* BufferedReader  BufferedWriter 带缓冲区的字符输入输出流,可以提高字符输入输出的效率
* ObjectInputStream ObjectOutputStream 对象的输入输出流,用于将对象直接写入文件中,直接从文件中读取对象(操作的对象的类必须实现Serializable)
* InputStreamReader  OutputStreamWriter

java输入流读取几行文本_Java基础笔记Day_16相关推荐

  1. java 获得文件的行数据_Java 读取文件指定行数据

    public class ReadFileDemo1 { /** * 获取错误文件中的记录号 * @param sourceFile * @return */ public static int[] ...

  2. java io流读写文件换行_java基础io流——OutputStream和InputStream的故事(温故知新)...

    io流概述: IO流用来处理设备之间的数据传输,上传文件和下载文件,Java对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中. IO流分类 按照数据流向 输入流 读入数据 输出流 写出 ...

  3. java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  4. java用字节流统计程序行数_java基础拾遗

    说说&和&&的区别. &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则, ...

  5. JAVA判断sheet有效行数_Java 利用POI 读取指定excel的真实行数

    Java 使用poi包 读excel文件时,获取指定sheet页中数据行数可以通过调用 sheet.getLastRowNum() ;但这种方法仅限于当前sheet页中没有带格式的空白行时.如果其中一 ...

  6. java poi读取word中附件_java用poi实现对word读取和修改操作

    java编程要实现对word的操作没有vb那种编程语言来得容易,得借助一些开源组件,其中就包括jacob.poi等, 而poi应用得最为广泛,对word2003和2007的读和写word操作都十分方便 ...

  7. java 批量读取excel表格内容_java 使用POI批量导入excel数据

    一.定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 二.所需jar包: 三.简单的一个读取e ...

  8. java要频繁调用容器时_JAVA基础面试题

    JAVA相关基础知识1.面向对象的特征有哪些方面1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不 ...

  9. java io 读取多个对象_Java IO系列(五):读写对象ObjectOutputStream和ObjectInputStream详解...

    有必要多看几遍的 关于字符和字节,例如文本文件,XML这些都是用字符流来读取和写入.而如RAR,EXE文件,图片等非文本,则用字节流来读取和写入. 读写对象,传输对象在Java中很常使用,在javaB ...

最新文章

  1. 四大传值详解:属性传值,单例传值,代理传值,block传值
  2. K - 老鼠走迷宫(DFS)
  3. UNITY 打APK是如何确定哪些资源有用哪些无用的
  4. 最美的Linux中文版的吗,号称最美的Linux发行版——Elementary OS
  5. js window.event 对象学习
  6. 前端学习(2617):删除品牌
  7. 由IDC机房测试谈主动工作教学实战案例!
  8. Android中ActionBar中不显示overflow(就是三个点的那个按钮)解决办法
  9. springMVC简易学习笔记三(文件上传与异常处理)
  10. ST 电机库 电机位置环7天冲刺开发
  11. 力软框架java_力软敏捷框架 jfGrid 使用例子之一
  12. Tracepro中up vector和normal vector的定义2
  13. 神经网络中常用的误差平方和损失函数是什么
  14. Oracle 同义词,赋权语句图解记录
  15. Python基础编程题
  16. org.eclipse.jdt版本更新导致包引入问题
  17. 慕课网懒懒交流会AngularJs专场学习笔记
  18. Win7系统安装教程【附Win7/64位系统下载地址】
  19. XSKY新一代分布式文件系统XGFS揭秘——元数据服务
  20. Web Worker 初探

热门文章

  1. how SAP OData supported option in odata eq ne lt gt?
  2. Tax debug and BP number external generation
  3. CRM呼叫中心异步搜索实现的调试截图
  4. Action framework - Table PPFTTRIGG
  5. How to resolve ATC error message Package Violation (Error) - Missing Use Access (USEM)
  6. Java AOP研究之How is beforeMethodAdvice called
  7. SAP WebIDE里的JavaScript代码检查code check
  8. SAP Customer Data Cloud的Audit log设置
  9. 安装指定版本的minikube
  10. 如何在Ubuntu里安装Helm