美文网首页
Java基础笔记总结(13)-IO流(1)FileInputSt

Java基础笔记总结(13)-IO流(1)FileInputSt

作者: 吵吵先生 | 来源:发表于2019-01-27 22:10 被阅读0次

IO流

IO流通常用来处理设备之间的数据传输

Java对数据的操作是通过流的形式

Java用于操作的流的类都在IO包

按照流向:分为输入流和输出流

按操作类型:

字节流:字节流可以操作任何数据,因为计算机的数据都是按照字节存放

字符流:字符流只能操作纯字符数据,比较方便

字符大 字节小

常用的父类:

抽象父类:InputStream(字节输入流)  OutputStream(字节输出流)

抽象父类: Reader(字符输入流) Writer(字符输出流)

IO程序书写

导入IO包类,进行IO异常处理,释放资源

--------------------------------------------------------------------------

FileInputStream

FileInputStream fis = new FileInputStream("xxx.txt");

int x = fis.read();

System.out.println(x);

int y = fis.read();

System.out.println(y);

fis.close();

每read()一次,就向后移动一次并再次读取

注意,文件的结束标记是-1

while((len = fis.read())!=-1){

System.out.println(len);

}

fis.close();

为什么返回Int而不是Byte

任何文件读取的结束都是-1 为了保证读取过程中不会因为读到byte的-1而终止读取过程,因此选择读取int来执行操作

-----------------------------------------------------------------------------

拷贝图片,音乐 逐字节拷贝特别慢

available()方法 获取读取文件的所有字节个数(这个方法可能导致内存溢出)

FileInputStream fis = new FileInputStream("xxx.txt");

byte[] arr = new byte[fis.available()];//创建和文件一样大小的字节数组

fis.read(arr); 将文件上的字节读取到文件中(字节数组中)

FileOutputStream fos = new FileOutputStream("xxx");

fos.write(arr); 将字节数组中的字节数据写到文件上

----------------------------------------------------------------------------

读取小数组的方法

FileInputStream fis = new FileInputStream("xxx.txt");

byte[] arr = new byte[1024];

int len = 0;

while((len = fis.read(arr))!=-1)}{

fos.write(arr,0,len);

如果忘记加arr 返回不是读取的字节个数,而是字节的码表值,一定要先读到字节数里

-----------------------------------------------------------------------------

BufferInputStream

FileInputStream fis = new FileInputStream("xxx.txt");

FileOutputStream fos = new FileOutputStream("copy.txt");

BufferedInputStream bis = new BufferedInputStream(fis);//创建缓冲区,对输入流进行包装

BufferedOutputStream bos = new BufferedOutputStream(fos);//创建缓冲区,对输出流进行包装

int b ;

while((b=bis.read())!=-1){

bos.write(b);

}

bis.close();

bos.close();

字节流一次读取一个数组速度要更快

装饰设计模式,提供了字节缓冲区流

BuffferedInputStream bis 先在文件读取8192个数送到缓冲区,然后程序去缓冲区读取,如果所有缓冲区数据都被读完,再去获取8192个数据

BufferedOutputStream bos 程序将数据送到缓冲区,然后将缓冲区写满时,在将数据一次性送入到文件中

相比较而言,定义小数组要比Buffered读取更快,因为其读和写都是同一个数组,而Buffered操作的是两个数组

-----------------------------------------------------------------------------

flush()和close()的区别

BufferedInputStream bis  = new BufferedInputStream(new FileInputStream());

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream());

如果不加close 拷贝文件会稍微小一点点 close方法具备刷新的功能,关闭流之前就会刷新一次缓冲区,将缓冲区的字节全部刷新到文件上,再关闭

用bos.flush()直接刷新缓冲区即可

close和flush相比较, flush刷新完仍然可以继续写入

flush--->实时刷新

--------------------------------------------------------------------------

字节流读写中文(字节流读取中文造成乱码)(GBK中一个字符两个字节)

FileInputStream fis = new FileInputStream("xxx.txt");

byte[] arr = new byte[3]();

int len;

while((len = fis.read())!=-1){

  new String(arr,0,len);

}

fis.close();

而用字节流写出中文

FileOutputStream fos = new FileOutputStream("xxx");

fos.write("xxx".getBytes());

fos.write("\r\n".getBytes());//回车换行

fos.close();

--------------------------------------------------------------------------

标准异常处理代码

TryFinally

JDK 1.6以前

FileInputStream fis = null;

FileOutputStream fos = null;

try{

fis = new FileInputStream("xxx.txt");

fos = new FileOutputStream("xxx.txt");

}catch(Exception e){

e.printStackTrace();

}

finally{

try{

if(fis != null){

fis.close();

}

}finally{

if(fos != null){

fos.close();

}

}

JDK1.7

try(

FileInputStream fis = new FileInputStream("xxx.txt");

FileOutputStream fos = new FileOutputStream("xxx.txt");

){

int b;

while ((b = fis.read()) != -1) {

fos.write(b);

}

}

在try的小括号中书写类,必须要实现AutoCloseale接口

------------------------------------------------------

加密用异或操作,一个数异或两次等于其本身

拷贝文件

注意如果是自己拷贝文件,/r/n是换行操作符

相关文章

  • Java基础笔记总结(13)-IO流(1)FileInputSt

    IO流 IO流通常用来处理设备之间的数据传输 Java对数据的操作是通过流的形式 Java用于操作的流的类都在IO...

  • java中有几种类型的流

    java中有几种类型的流 一、字节流 InputStream/OutputStream 1、FileInputSt...

  • java IO入门笔记

    1.java IO流的概念,分类,类图 1.1. java IO 流的概念 java的io是实现输入和输出的基础,...

  • Java IO详解

    1 Java IO流的概念,分类 1.1 Java IO流的概念 java的IO是实现输入和输出的基础,可以方便的...

  • Java的IO & NIO

    IO流学习总结一Java IO,硬骨头也能变软二java IO体系的学习总结三Java IO面试题 NIO与AIO...

  • Java学习总结之Java IO系统(二)

    本文接着Java学习总结之Java IO系统(一),我们继续总结Java IO系统的相关知识。 字符流(Write...

  • java基础之IO流

    IO流上:概述、字符流、缓冲区(java基础) IO流结构图 FilterInputStream、FilterOu...

  • Java基础17:Java IO流总结

    本文介绍了Java IO流的基本概念,使用方法,以及使用的注意事项等。帮助你更好地理解和使用Java的IO流。 具...

  • JAVA IO基本知识

    本部分总结一下JAVA IO的相关知识。 全部章节传送门: JAVA IO学习笔记: IO基本知识 JAVA IO...

  • Java基础-io知识回顾

    Java拾遗系列- io知识 简介 io分类及相关实例3.总结 1.简介 2.io分类及相关应用 2.1 io流...

网友评论

      本文标题:Java基础笔记总结(13)-IO流(1)FileInputSt

      本文链接:https://www.haomeiwen.com/subject/nponjqtx.html