一、引言

  趁着年后的这点时间,抓紧点时间回顾下javase中的IO流,以往都是用到那些常用的IO类,这次来个全点的,有不对的地方还请大神指正一下,做到坚持写博的习惯来。。。。。。

  回归正题,IO流顾名思义,就是输入流(input)与输出流(output),我们可以通过IO流中的一些类来实现从程序中读取外部的数据或者通过程序输出到外部的设备中

  在IO流中我们可以进行分类,分别可以按照数据流的方向和数据单位进行分类,分类如下:

            输入流                 输出流
        字节流    InputStream        OutputStream
        
        字符流    Reader             Writer

  上述四大基本流可以交叉进行连接

  之前查看源码时发现上述四大基本流都是抽象的,不能直接使用,所以在他们的基础上,又派生出了很多具体功能的子类

 注:在字节流和字符流中,1字符 = 2字节 、 1字节(byte) = 8位(bit)  、 一个汉字占两个字节长度,常识经常忘记

二、字符流代码示例

  1、输出字符数据到文件中

    以前对这些流总是弄混,后来发现我们可以从需求中找到一些规律,例如此刻的需求是需要字符数据到文件中,所以需要联想到Writer--->OutputStreamWriter--->FileWriter

    流在读取文件时候,如果文件不存在则会自动的生成一个新的文件,如果已经存在,默认情况下会覆盖该文件,如果不想覆盖,需要在构造方法中进行明确的指定

  

Class FileWriterDemo{
public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("D:\\123.txt");
fw.write("hello world!");
fw.flush();   //刷新缓冲区,可以多次写入多次刷新,刷新后可以再次写入数据
fw.write("beichen");
fw.close(); //flush和close的区别:flush刷新后可以继续输入,close刷新后不能继续输入。
}
}

  2、从文件中读取数据

    按照上面的套路,我们可以分析出需要使用Reader -- InputStreamReader -- FileReader

    

Class FileReaderDemo{
public static void main(String[] args) {
try { FileReader fr = new FileReader("D:\\123.txt");
char[] ch=new char[100];
        Reader read=new FileReader(f);
        int temp=0;
        int count=0;
        while((temp=read.read())!=(-1)){
           ch[count++]=(char)temp;
        }
        read.close();
        System.out.println("内容为"+new String(ch,0,count));
        }
catch (IOException e) {
system.out.println('失败')
}
}
}

三、字节流代码示例

  对于电脑来讲,电脑只认识0和1,归根结底是对字节的处理

  1、复制文件

  

Class FileCopy{
public static void main(String[] args){ FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("D:\\123.txt");
fos = new FileOutputStream("D:\\1.txt");
byte[] copy = new byte[1024];
int len = 0;
while((len=fis.read(copy))!=-1) {
fos.write(copy,0,len);
}
}
catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("复制文件异常");
}
finally {
try {
if(fis!=null) fis.close();
}
catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("读取流");
}
}
}
}

四、字符流缓冲区代码示例

  字符流的缓冲区可以分成:BufferReader、BufferWriter

  先引用JDK文档概述:

    对BufferReader,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取

    对BufferWriter,将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

  综上我们可以看出来,缓冲区的出现时为了提高流的操作效率而出现的,在缓冲区中封装了一个数组,存入数据后可以一次取出

class BufferedReaderDemo {
public static void main(String[] args) throws IOException { BufferedReader buf = new BufferedReader(
newInputStreamReader(System.in));
String str = null;
System.out.println("请输入内容");
try{
str = buf.readLine();
}catch(IOException e){
e.printStackTrace();
}
System.out.println("你输入的内容是:" + str);
}
}

五、缓冲区字节流代码示例

  根据上面的规则我们也可以在文档出找出缓冲区的字节流分别是:BufferedInputStream、BufferedOutputStream

  在此我就不进行代码的演示,可以参考缓冲区字符流进行编写

  

IO流回顾与总结第一篇之字节流与字符流的操作。。。。。的更多相关文章

  1. Java字节流和字符流,是时候总结一下IO流了

    目录 从接收输入值说起 字节流读取 字符流读取 Scanner 读取 什么是 IO 流 字节流和字符流 字节流 字节输入流 字节输出流 缓冲流的原理 字符流 字符输入流 字符输出流 为什么字符流需要 ...

  2. Java基础:IO流之字节流和字符流

    1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...

  3. Java字节流与字符流

    九.字节流与字符流 9.1 IO的分类 <段落>根据数据的流向分为:输入流和输出流. 输入流 :把数据从其他设备上读取到内存中的流. 输出流 :把数据从内存 中写出到其他设备上的流. 数据 ...

  4. JAVA中的字节流与字符流

    字节流与字符流的区别? 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用 ...

  5. 牛客网Java刷题知识点之输入流、输出流、字节流、字符流、字节流的抽象基类(InputStream、OutputStream)、字符流的抽象基类(Reader、Writer)、FileWriter、FileReader

    不多说,直接上干货! IO流用来处理设备之间的数据传输. java对数据的操作是通过流的方式. java用于操作流的对象都在IO包中. IO流按操作数据分为两种:字节流和字符流. IO流按流向分为:输 ...

  6. JAVA IO 字节流与字符流

    文章出自:听云博客 题主将以三个章节的篇幅来讲解JAVA IO的内容 . 第一节JAVA IO包的框架体系和源码分析,第二节,序列化反序列化和IO的设计模块,第三节异步IO. 本文是第一节.     ...

  7. java.io中流的操作:字节流、字符流

    java.io中流的操作:字节流.字符流(1)使用File类打开一个文件(2)通过字节流或字符流的子类指定输出的位置(3)进行读/写操作(4)关闭输入/输出 1.字节流:主要是byte类型数据,以by ...

  8. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  9. 【Java IO流】字节流和字符流详解

    字节流和字符流 对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流. 1.从对文件的操作来讲,有读和写的操作——也就是输入和输出. 2.从流的流向来讲,有输入和输出之分. 3 ...

随机推荐

  1. directX根据设备类GUID查询所属的filter

    hr = m_pSysDevEnum->CreateClassEnumerator(*clsid, &pEnumCat, 0);    ASSERT(SUCCEEDED(hr));    ...

  2. JavaWeb中jdbcproperties配置文件

    开发中使用properties配置文件,方便后期维护. 文件位置: 任意,建议src下 文件名称:任意,扩展名为properties 文件内容:一行一组数据,格式“key=value” key 命名自 ...

  3. Excel2010 日文显示乱码

  4. ThreadPoolExecutor线程池参数设置技巧

    一.ThreadPoolExecutor的重要参数   corePoolSize:核心线程数 核心线程会一直存活,及时没有任务需要执行 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线 ...

  5. CF#462 div1 D:A Creative Cutout

    CF#462 div1 D:A Creative Cutout 题目大意: 原网址戳我! 题目大意: 在网格上任选一个点作为圆中心,然后以其为圆心画\(m\)个圆. 其中第\(k\)个圆的半径为\(\ ...

  6. 【BZOJ2959】长跑(Link-Cut Tree,并查集)

    [BZOJ2959]长跑(Link-Cut Tree,并查集) 题面 BZOJ 题解 如果保证不出现环的话 妥妥的\(LCT\)傻逼题 现在可能会出现环 环有什么影响? 那就可以沿着环把所有点全部走一 ...

  7. [USACO12FEB]Nearby Cows

    题意 给出一棵n个点的无根树,每个点有权值,问每个点向外不重复经过k条边的点权和 题解 设f[i][j]表示所有离i节点距离为j的点权和,v为它周围相邻的点,t为v的个数,则 j > 2 f[i ...

  8. PHP随机函数-集锦

    1 PHP随机函数收藏 function random_string($len = 6) { $chars = array( "a", "b", "c ...

  9. three.js引擎基础知识—摄像机、场景及渲染器

    一.three.js采用右手坐标系: x轴正方向向右,y轴正方向向上,z轴由屏幕从里向外,如下图右: 二.3D编程三要素:场景.渲染器.摄像机 1.场景:创建的物品和模型都需放入场景中 threejs ...

  10. Problem : 1202 ( The calculation of GPA )

    Losers always whine about their best. Winners go home and fuck the prom queen. 很操蛋却非常有意思的题目,注意变量的类型, ...