IO流的复习总结

       ------注:蓝色背景段落是例子;红色背景的字段IO流的功能类。

编码问题

 String s = "威力锅ABC";
  //utf-8编码中文占用三个字节,英文占用一个字节
  byte [] bytes = s.getBytes();//转换成字节序列用的是项目默认的编码(utf-8)
  for(byte b:bytes) {
   //toHexString 把字节(转换成了int)以16进制的方式显示。
   System.out.print(Integer.toHexString(b & 0xff) + " ");
  }
  System.out.println();
  //gbk编码中文占用两个字节,英文占用一个字节
  byte [] bytes1 = s.getBytes("gbk");//指定字节(gbk)
  for (byte b : bytes1) {
   System.out.print(Integer.toHexString(b & 0xff) + " ");
  }
  System.out.println();
  //Java是双字节编码utf-16be:中文和英文都要占两个字节
  byte[] bytes2 = s.getBytes("utf-16be");
  for (byte b : bytes2) {
   System.out.print(Integer.toHexString(b & 0xff) + " ");
  }
  System.out.println();
  /*当你的字节序列是某种编码时,这个时候把字节变成
   * 字符串,也需要用这种编码方式,否则会出现乱码
   * */
  String str = new String(bytes2);
  System.out.println(str);
  String str0 = new String(bytes2,"utf-16be");
  System.out.println(str0);
  /*
   * 文本文件就是字节序列
   * 可以是任意编码的字节序列
   * 如果我们在中文机上直接创建文本文件,那么该文本文件只认识ansi编码
   * 联通、联这是一种巧合,他们正好符合了utf-8编码的规则
   * */

File类的使用

java.io.File类用于表示文件/目录

File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问

我不知道的:File file = new File("E:/resouce\\file\\text.txt");//双斜杠“\\”和反斜杠“/”是可以同等替代的

file.mkdir();//创建目录、file.createNewFile();创建新的文件;

RandomAccessFile的使用

RandomAccessFile Java提供的对文件内容的访问,既可以读文件,也可以写文件。

RandomAccessFile 支持随机访问文件,可以访问文件的任意位置。

(1)java文件模型

  在硬件上的文件是byte byte byte存储的,是数据的集合

(2)打开文件

  有两种模式"rw"(读写)"r"(只读)

  RandomAccessFile raf = new RandomAccessFile(file,"rw/r");

  因为支持随机访问文件,所以有文件指针,打开文件时指针在开头 pointer = 0;

(3)写方法

  raf.write(int);--->只写一个字节(后8位),同时指针指向下一位,准备再次写入

(4)读方法

  int b = raf.read();--->读一个字节

(5)文件写完后一定要关闭(Oracle 官方说明)

  

字节流的使用

(1)InputStream、OutputStream

  InputStream抽象了应用程序读取数据的方式

  OutputStream抽象了应用程序写出数据的方式

(2)EOF = End 读到-1就读到结尾

(3)输入流基本方法

  int b = in.read();读取一个字节无符号填到int低八位。-1是EOF

  in.read(byte[]buf)读取数据填充到字节数组buf

  in.read(byte[]buf,int start,int size)读取数据填充到字节数组buf,从buf的start位置开始,存放size长度的数据

(4)输出流基本方法

  out.write(int b);写出一个bute到流,b的低八位

  out.write(byte [] buf);将buf字节数组都写入到流

  out.write(byte [] buf,int start,int size);

(5)FileInputStream---->具体实现了在文件上读取数据

(6)FileOutputStream实现了向文件中写出byte数据的方法

(7)DataOutputStream/DataInputStream

  对“流”功能的扩展,可以更加方面的读取int,long,字符等类型数据

  DateOutputStream

    writeInt()/writeDouble()/writeUTF()

(8)BufferedInputStream & BuferedOutputStream

  这两个流类为IO提供了带缓冲区的操作,一般打开文件进行写入或读取操作时,都会加上缓冲,这种流模式提高了IO的性能

  从应用程序中把数据放入文件,相当于将一缸水导入到另一个缸中:

  FileOutputStream--->write()方法相当于将水一滴一滴地转移过去

  DataOutputStream--->writeXxx()方法会方便一些,相当于把水一瓢一瓢地转移过去

  BuferedOutputStream--->write方法更方便,相当于把水先一瓢一瓢地放入桶中,然后从桶中放入到另一个缸中

  long start = System.currentTimeMillis();//获取当前时间点(毫秒)

  

字符流的使用

(1)编码问题

(2)认识文本和文本文件

  Java的文本(char)是16位无符号整数,是字符unicode编码(双字节编码)

  文件时byte byte byte ...的数据序列

  文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果

(3)字符流(Reader Writer)--->注:字符流操作的是文本文件(因为mp3、二进制文件都是字节序列)

  字符的处理,一次处理一个字符

  字符的底层任然是基本的字节序列

  字符流的基本实现

    InputStreamReader  完成byte流解析为char流,按照编码解析

    OutputStreamWriter      提供char流到byte流,按照编码处理

    FileReader/FileWriter

     FileReader fr = new FileReader("e:/resouce/demo/FileWriter.txt");

     FileWriter fw = new FileWriter("e:/resouce/demo/FileWriter.txt",true);

     //多加了一个参数“true”后,复制的文件内容会追加到目标文件内容后边

  字符流的过滤器

     BufferedReader--->readLine一次读一行

     BufferedWriter/PrintWriter--->写一行

对象的序列化和反序列化

  (1) 对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化

   (2)序列化流(ObjectOutputStream),是过滤流----writeObject

            反序列化流(ObjectInputStream)----readObject

   (3)序列化接口(Serializable)

    对象必须实现序列化接口,才能进行序列化,否则将出现异常

    这个接口,没有任何方法,只是一个标准

      //将对象序列化到文件file中

      ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));

      oos.writeObject(stu);

  (4)transient关键字

  

      

    

 

Java I/O输入输出流的更多相关文章

  1. 第27章 java I/O输入输出流

    java I/O输入输出流 1.编码问题 import java.io.UnsupportedEncodingException; /** * java涉及的编码 */ public class En ...

  2. Java复习7.输入输出流

    Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...

  3. JAVA Io 缓冲输入输出流

    java中提供带缓冲的输入输出流.在打开文件进行写入或读取操作时,都会加上缓冲,提高了IO读写性能. 1. BufferedInputStream 缓冲输入流 2. BufferedOutputStr ...

  4. Java I/O输入输出流详解

    一.文件的编码               开发时一定要注意项目默认的编码!!!!!!!!               文件操作的时候一定要记得关闭!!!!!!!!        ASCII:美国标准 ...

  5. Java IO学习--输入输出流

    一.Java IO的定义 I/O:输入输出系统,由输入输出控制系统和外围设备两部分组成. Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输 ...

  6. java实验8-Java输入输出流

    1 读写文件 [实验目的] (1)掌握文本文件的读写方法. (2)掌握随机文件的读写方法. (3)掌握InputStream.OutputStream抽象类的基本使用. (4)掌握FileInputS ...

  7. Java工具类-输入输出流

    输入输出流 1.概念 输入输出流:文件复制,上传 输出流: System.out.println() 写操作,程序将字符流写入到"目的地",比如打印机和文件等 输入流 :Scann ...

  8. java学习笔记-输入输出流

    ================File类 =====================InputStream ==================OutputStream ============== ...

  9. Java中的输入输出流

    FileInputStream和FileOutputStream 创建含磁盘文件的输入 输出流对象. FileInputStream继承自InputStream,用于读取本地文件中的字节数据,由于所有 ...

  10. 《三》Java IO 字节输入输出流

    那么这篇博客我们讲的是字节输入输出流:InputStream.OutputSteam(下图红色长方形框内),红色椭圆框内是其典型实现(FileInputSteam.FileOutStream)     ...

随机推荐

  1. python 统计单词个数,并按个数与字母排序

    # coding: utf-8 # In[1]: import collections str = "Be slow to promise and quick to perform" ...

  2. jqgrid自定义列表开发=》实现高级查询

    标题已指出本文要说的三件事,首先是主角jqgrid,将应用在自定义列表中,重点介绍如何实现高级查询. 使用jqgrid实现自定义列表分为两大步骤,首先是要根据业务完成jqgrid的对象定义,即列表的描 ...

  3. java基础知识—运算符和基本选择结构

    1.保存真假,使用boolean变量 boolean有两个值:true 真 false 假 2.从控制台接受输入信息,通过创建扫描器 Sacnner input=new Sacnner(System. ...

  4. WINDOWS SERVER 2016 IE使用FLASH PLAYER的方法

    Windows Server 2016出于安全的考虑,默认禁用了Flash Player.把Windows Server 2016作为日常操作系统的童鞋会发现,IE里完全没有Flash Player这 ...

  5. LAD 线性判别分析

    线性判别分析,简称LDA,是一种线性学习方法. 常用来降维,是一种有监督的降维方法,是基于最佳分类效果的降维方法. 核心思想 给定训练样本,带label,设法将样本投影到一条直线上,使得同类样例的投影 ...

  6. java集合(二)

  7. IP通信基础原理课堂笔记----HCL(1)

    PC端配置:打开接口,配置ip地址 交换机配置:①创建VLAN system-view vlan 10 vlan 20 ②配置PC端接口 interface gi 1/0/1 port link-ty ...

  8. linux实时时钟相关函数

    time 功能:获取1970年1月1日00:00:00到现在的秒数 原型:time_t time(time_t *t); 参数: t:获取到的秒数 返回:获取到的秒数 说明:在time.h中定义了ti ...

  9. mysql事务特点总结

    1.mysql事务有4个隔离级别,以及会出现的问题如下图: 2. 脏读: 开启事务A,B.事务A在还没有提交的情况下,假如第一次查询id=1的用户的age=24.事务B执行了update 表 set ...

  10. Python成长之路【第三篇】函数

    函数 一.背景 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处 ...