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. imx6 工具链下载地址

    http://downloads.yoctoproject.org/releases/yocto/yocto-1.7.1/toolchain/

  2. 漫谈hashcode

    概要 对于hashcode,相信很多朋友都不陌生,应为我们很多时候都需要用到这个,比如hashMap中就用到了,根据key的hash值来决定value存放的位置,之后来取得时候直接到指定的位置上那就行 ...

  3. Python中的 *args 和 **kwargs

    基本概念 Python支持可变参数,最简单的方法莫过于使用默认参数. def test_defargs(one, two=2): # 参数one没有默认值,two的默认值为2 print('Requi ...

  4. php短信验证码接口接入流程及代码示例

    对于绝大部分企业来说,所使用的短信验证码接口都是第三方短信服务商所提供,目前市场上短信服务商有很多,在此向大家推荐一家动力思维乐信,运营13年,值得信赖! 就拿动力思维乐信短信验证码接口为例,详细介绍 ...

  5. No space left on device Linux系统磁盘空间已满

    1. 删除系统日志等   删除生成 core,mbox等文件   #find / -name core|xargs rm –rf   删除日志   2.重起机器

  6. Python列表以及列表的处理方法

    在Python中,当我们需要存储大量的数据时,可使用列表存储,列表本质是一种有序的集合 格式:列表名 = [列表元素1,列表元素2,列表元素3,...列表元素n] 如果想创建一个只有单个元素的列表,格 ...

  7. 关于“load”方法

    load是一个方法,在程序文件中,只有ruby遇到它的时候才会执行.Ruby不会搜索整个文件去执行load命令.也就是说,当Ruby解释器遇到它的时候,它才会去寻找它要加载的文件.这意味着需要加载的文 ...

  8. 机器学习笔记(四)Logistic回归模型实现

     一.Logistic回归实现 (一)特征值较少的情况 1. 实验数据 吴恩达<机器学习>第二课时作业提供数据1.判断一个学生能否被一个大学录取,给出的数据集为学生两门课的成绩和是否被录取 ...

  9. L362 When to Bring up Salary During the Job Interview Process

    Money is an awkward topic of conversation for many professionals—even more so when you’re busy tryin ...

  10. javascript 字符串处理

    ---恢复内容开始--- 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信你也跟我一样,发现字符串 ...