一、引言

  趁着年后的这点时间,抓紧点时间回顾下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. linq根据传入数据集合查询对应子级数据

    工作中经常用到的linq根据传入数据集合查询对应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点对应ID数据集合,再根据ID数据集合查询全部子级数据. //获取缓存数据 ...

  2. Linux命令top 详解

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 01:06:48 up 1:22, 1 ...

  3. CSS3 column属性

    css3 column属性的应用 1.案例源码 <!DOCTYPE html><html lang="en"><head> <meta c ...

  4. flash数据交互

    新随笔 联系 订阅 管理 随笔 - 14  文章 - 5  评论 - 0 安卓中webview读取html,同时嵌入Flex的SWF,交互 安卓activity与html交互很简单,用javascri ...

  5. ssm整合快速入门程序(一)

    整合基础说明 spring 是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Jav ...

  6. [luogu3600]随机数生成器

    题面在这里 题意 给定n个[1-x]的随机整数\(a_1,a_2,a_3,...,a_n\)和q个询问区间\((l_i,r_i)\), 求出\(\max_{i=1}^{q}({\min_{j=l_i} ...

  7. HNOI2008玩具装箱

    斜率优化 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <s ...

  8. Frogger POJ - 2253

    题意 给你n个点,1为起点,2为终点,要求所有1到2所有路径中每条路径上最大值的最小值. 思路 不想打最短路 跑一边最小生成树,再扫一遍1到2的路径,取最大值即可 注意g++要用%f输出!!! 常数巨 ...

  9. 【noip模拟】Fantasia

    Time Litmit: 1000ms      Memory Limit: 256MB Description 给定一张 $N$ 个点.$M$ 条边的无向图 $G$ .每个点有个权值$W_i$. 我 ...

  10. 云计算之路-阿里云上:服务器CPU 100%问题是memcached的连接数限制引起的

    非常抱歉,昨天的服务器CPU 100%问题是达到 memcached 的连接数限制引起的,不是阿里云服务器的问题. 之前我们用的是阿里云“云数据库 memcached 版”,上个周末我们换成了自己搭建 ...