I/O流之字符流

问题:字节流和字符流区别?

java1.0只提供了字节流,分为输出流(Inputstream)和输入流(Outputstream),

以字节为单位来读取或写入数据,以二进制来处理数据(8位),但无法处理Unicode字符。

java1.1版本增加了字符流Reader(输入流)和Writer(输出流),可以解决16位的

Unicode字符。

所以最好用字符流

(Unicode字符:可以在二进制和字符间相互转换的一种编码机制或准则)

//读取文件并复制文件
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class FileWriteTest{ public static void main(String[] args) { try{
FileReader finput=new FileReader("桌面\\递归");//产生输入流
FileWriter Foutput=new FileWriter("桌面\\递归副本");//产生输出流 int i=0;
while((i=finput.read())!=-1){
System.out.print((char)i);
Foutput.write(i);
}
finput.close(); Foutput.flush();
//**注意,Foutput,调用flush()方法来强制写出所有缓冲区的数据,清空缓冲区
Foutput.close(); }catch(FileNotFoundException e){
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
/*运行结果:无法找到文件,为什么?
java.io.FileNotFoundException: 桌面\递归 (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.io.FileReader.<init>(FileReader.java:58)
at FileWriteTest.main(FileWriteTest.java:11)
*/

说明:如果要输出流写数据,需要在写入操作完成后,调用flush()方法来强制写出所有缓冲区的数据

I/O原理

数据源———输入流——>java程序读取数据

java程序写入数据———输出流——>数据源(存储媒介)

说明:

数据源:比如文件、内存、网络连接

流的分类:

数据流:输入流和输出流(读取和输出)

数据传输单位:字节流 (InputStream和OutputSteam)和字符流(Writer和Reader)

按功能分:过滤流(直接操作数据源的流)和节点流(对已存在的流进行读写和封装,为通过更强大的读写功能)

缓冲流和对象流

缓冲流的应用场景?(读大文件时,可以增加读写效率,用BufferReader来读)

当文件大的时候,肯定用字符流读会很不便捷,则需要用过滤流,也叫处理流,即对一个已存在的流进行连接和封装,并为了扩展其读写功能。而缓冲流就是其中一种。

缓冲流:直接操作一个数据源的节点流的一个包装。

例如把

FileReader finput=new FileReader("桌面\\递归");//产生输入流

改为

BufferReader finput=new BufferReader("桌面\\递归");

此时读取的效率会更高

对象流的应用场景?

对象流也是过滤流的一种,主要有ObjectOutputStream类和ObjectInputStream类,用于存和读基本类型数据或对象的过滤流,特点是把java中的对象写到数据源中(序列化,即写入或者理解为存),也能把对象从数据源中还原出来(反序列化,解析或者读取)。

说明:

1.对象流不能序列化static或transit修饰的成员变量。

2.序列化的对象所对应的类那必须实现Java.io.Serializable接口。

比如:

import Java.io.Serializable;

public class Student implements Serializable{

……

}

问题:

什么是不可序列化的对象呢?是不是这个对象本身就已经被写出来了呢?

static是修饰静态变量时,只要类加载即可,不需要读到数据源(文件、内存、网络连接)当中,即不需要序列化。

随机存储存取文件流和File类

1.随机存储存取文件流

RandomAccessFile是一种特殊的流类,它在文件任何地方读取或写入数据。

RandomAccessFile能在文件里随意地前后移动,它是一个直接继承于Object的类。

简单概括:文件内容可跳读、可间断下载(不连续)、储存

一般RandomAccessFile的工作方式是吧DataInputStream和DataOutputStream

结合起来,再加上一些自己的方法。

常用方法:

long getFilePointer();   //用于得到当前文件指针

void seek(long pos);    //用于移动文件指针到指定的位置

int   skipBytes(int n);   //使文件指针向前移动指定的n个字节,即跳过的字节数

2.File类

应用场景是什么?

操作某个文件夹或设置某个文件夹的属性或代表文件的概念,以及存储一些对于文件

的基本操作。

说明:其定义了一系列与操作系统平台无关的方法来操作文件和目录。

(查看API文档关于java.File类)

File文件或目录的生成

File类的对象可代表一个文件路径

File f1=new File(“d:\\test\\1.txt”);

//把以往的笔记看看,其实你之前花时间学过IO流的,不懂的位置参看一下蓝白书的例子,另外把红黄书的后面的题目做一下,宝典的对应的内容复习一下。

I/O复习的更多相关文章

  1. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  2. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

  3. 我的操作系统复习——I/O控制和系统调用

    上篇博客介绍了存储器管理的相关知识——我的操作系统复习——存储器管理,本篇讲设备管理中的I/O控制方式和操作系统中的系统调用. 一.I/O控制方式 I/O就是输入输出,I/O设备指的是输入输出设备和存 ...

  4. 复习(1)【Maven】

    终于开始复习旧知识了,有输入必然要有输出.输入和输出之间的内化过程尤为重要,在复习的同时,真正把学到的东西积淀下来,加深理解. Maven项目概念与配置 Maven是一个项目管理和综合工具.Maven ...

  5. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  6. JS复习--更新结束

    js复习-01---03 一 JS简介 1,文档对象模型 2,浏览器对象模型 二 在HTML中使用JS 1,在html中使用<script></script>标签 2,引入外部 ...

  7. jQuery 复习

    jQuery 复习 基础知识 1, window.onload $(function(){});   $(document).ready(function(){}); 只执行函数体重的最后一个方法,事 ...

  8. jQuery5~7章笔记 和 1~3章的复习笔记

    JQery-05 对表单和表格的操作及其的应用 JQery-06 jQuery和ajax的应用 JQery-07 jQuery插件的使用和写法 JQery-01-03 复习 之前手写的笔记.实在懒得再 ...

  9. HTML和CSS的复习总结

    HTML(Hypertext Markup Language)超文本标记语言:其核心就是各种标记!<html> HTML页面中的所有内容,都在该标签之内:它主要含<head>和 ...

  10. 2017年1月1日 java学习第二天复习

    今天是新年的第一天,以前学习没有总结习惯,学习效率和成果都很不好.  学习的过程就是反复的复习和不断学习的过程,开始今天的学习总结   学习java的第二天. 今天学习了java最基础的一些内容,照着 ...

随机推荐

  1. 服务端渲染(ssr)初了解

    之前接触的比较多的是SPA单页面应用,前端路由渲染,对于node服务端渲染刚开始了解到,服务端渲染的话相对于SPA来说有助于SEO优化,首屏加载更快. 和之前的SPA项目不同,之前公司spa的发布部署 ...

  2. 50.TO_NUMBER 将给出的字符转换为数字

    .SYSDATE 用来得到系统的当前日期 SQL> select to_char(sysdate,dd-mm-yyyy day) from dual; TO_CHAR(SYSDATE, ---- ...

  3. HOJ 2148&POJ 2680(DP递推,加大数运算)

    Computer Transformation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4561 Accepted: 17 ...

  4. CCCC L2-020. 功夫传人 搜索 bfs && 精度+ 特判

    https://www.patest.cn/contests/gplt/L2-020 题解:给你一颗树,让你遍历一遍,顺便更新一下数据,每次到根节点时将其对应的数据加到ans上面.这里用的bfs. 坑 ...

  5. hadoop 2.x HA(QJM)安装部署规划

    一.主机服务规划: db01                                             db02                                      ...

  6. 堆内存泄漏移除导致tcp链接异常高

    故障现象: 1:活动前端Nginx服务器TCP连接数到1万多 2:活动后端Tomcat其中1台TCP连接数达4千,并且CPU瞬间到780%(配置8核16G),内存正常 3:重启后端Tomcat后,TC ...

  7. 东哥讲义2 - 基于TCP,UDP协议的攻击,分析与防护

    TCP SYN FLOOD 攻击 正常的TCP三次握手过程: 处于SYN FLOOD攻击状态时的三次握手过程: 查看示例:x_syn.c文件,一个实现了自定义mac,ip,tcp头部的syn floo ...

  8. 实例Python处理XML文件的方法

    转自:http://www.jb51.net/article/71773.htm 以下是部分代码: <?xml version="1.0" encoding="UT ...

  9. centos7 kdump.service启动失败的解决方法

    最近接触学习使用CentOs7,命令上的确有很大变化. 加入到开机启动,可以使用下面命令来加到开机启动列表, systemctl enable xxx.service 通过下面命令可以查看有哪些是开机 ...

  10. Is It A Tree?----poj1308

    http://poj.org/problem?id=1308 #include<stdio.h> #include<string.h> #include<iostream ...