返回顶部
首页 > 资讯 > 精选 >Java中的字节和字符输入流的简单介绍
  • 760
分享到

Java中的字节和字符输入流的简单介绍

2023-06-20 18:06:21 760人浏览 安东尼
摘要

本篇内容介绍了“Java中的字节和字符输入流的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录字节输出流OutputStream字

本篇内容介绍了“Java中的字节和字符输入流的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 字节输出流OutputStream

    • 字符输出流

    • 字节输入流InputStream

    • 字符输入流Reader

    • 字节流和字符流的区别

  • 总结

    我先解释一下什么叫IO流:

    • I:指的是InputStream,这是一个抽象类,最常用的子类是FileInputStream

    • O:值得是OutputStream,这也是一个抽象类,最常用的子类是OutputStream

    • 流:由于在进行文件操作的时候大多数是用的byte数据,这些数据并不是一次性写入(读取),而是像水龙头那样慢慢的流(想象一下你接水的场景)

    废话还是不多bb,先来一份简单的代码:

    File file=new File("e:"+File.separator+"JavaLearn"+File.separator+"EleventhDemo"+File.separator+"1.txt");        if (!file.getParentFile().exists()){            file.getParentFile().mkdirs();            System.out.println("父级目录创建成功");        }        if (!file.exists()){            file.createNewFile();        }

    其中File.separator指的是当前系统的默认分隔符,这样写的原因是可以保证Java文件在windows系统运行时和linux系统运行时都不会出错

    这段代码也很简单,主要就是创建一个文件。

    当然,这都不是重点,重点在下面

    字节输出流OutputStream

    对于Output Stream类来说,它本身定义的是一个抽象类,按照抽象类的原则来讲,需要定义抽象类的子类,而我们要执行的是文件操作,则可以使用FileOutputStream子类来完成。而我们最关心的还是子类中的构造方法

    方法描述
    public FileOutputStream(File file) throws FileNotFoundException实例化FileOutputStream,主要用于新建数据
    public FileOutputStream(File file,boolean append) throws FileNotFoundException实例化FileOutputStream,主要用于追加数据

    我们在实例化OutputStream对象之后肯定要进行输出操作。在OutputStream类中定义了3个输出方法。例如:

    方法描述
    public abstract void write(int b) throws IOException输出单个字节数据
    public void write(byte[] b) throws IOException输出一组字节数据
    public abstract void write(byte[] b,int off,int len) throws IOException输出部分字节数据

    可能大家在看表的时候已经发现了,都是byte类型的数据。

    使用OutputStream向文件中输出数据。

    import java.io.*;public class test {    public static void main(String[] args) throws Exception{        File file=new File("e:"+File.separator+"JavaLearn"+File.separator+"EleventhDemo"+File.separator+"1.txt");        if (!file.getParentFile().exists()){            file.getParentFile().mkdirs();            System.out.println("父级目录创建成功");        }        if (!file.exists()){            file.createNewFile();        }        OutputStream output=new FileOutputStream(file);// 实例化父类        String data="Hello World!";        output.write(data.getBytes());        output.close();        }}

    可以发现,在文件输出的过程中,如果要输出的文件和目录不存在那么会覆盖掉原有的内容,咋办呢?别忘了我们还有一个构造方法专门是为了追加数据的:

    import java.io.*;public class test {    public static void main(String[] args) throws Exception{        File file=new File("e:"+File.separator+"JavaLearn"+File.separator+"EleventhDemo"+File.separator+"1.txt");        if (!file.getParentFile().exists()){            file.getParentFile().mkdirs();            System.out.println("父级目录创建成功");        }        if (!file.exists()){            file.createNewFile();        }        OutputStream output=new FileOutputStream(file,true);// 追加数据        String data="Hello World!";        output.write(data.getBytes());        output.close();        }}

    执行一遍会发现,会自动的把数据附加在已有的数据后面。

    我们在来看看另一种类似的流

    字符输出流

    看标题,字节和字符就差一个字,但是,熟悉Java数据基本类型的都知道。这俩货一个是byte,一个是String。那么我们在对文件进行输出操作的时候,就可以把需要输出的内容定义成String类型而不是byte字节型;

    同样,Writer也是一个抽象类,当我们用于文件操作的时候,常用的子类就是FileWriter。我们来看看Writer类的常用方法:

    方法描述
    public abstract void close() throws IOException关闭输出流
    public void write(String str) throws IOException字符串输出
    public void write(char[] cbuf) throws IOException将字符数组输出
    public abstract void flush() throws IOException强制性清空内存

    还是不多bb,上代码,就知道啥样子了:

    import java.io.*;public class test {    public static void main(String[] args) throws Exception{        File file=new File("e:"+File.separator+"JavaLearn"+File.separator+"EleventhDemo"+File.separator+"1.txt");        if (!file.getParentFile().exists()){            file.getParentFile().mkdirs();            System.out.println("父级目录创建成功");        }        if (!file.exists()){            file.createNewFile();        }        Writer out=new FileWriter(file);        String data="Hello World!";        out.write(data);        out.close();        }}

    了解了输出流,我们再来看看输入流;

    Java中的输入流有两种,一种是InputStream,另一种就是Reader。看这名字就知道,md,可能又是一种简单的一种难的。没错,你猜对了;

    字节输入流InputStream

    同样,这货也是一个抽象类,用于文件操作的也是他的子类FileInputStream,当然也有几个方法用于操作文件:

    方法描述
    public abstract int read() throws IOException读取单个字节数据,每次执行read()方法都会读取一个数据源的指定数据,如果已经读到了结尾,则会返回-1
    public int read(byte[] b) throws IOException读取多个字节数据,如果要读取的数据小于byte的数据,这个时候read()方法的返回值int返回的是数据个数,如果现在开辟的字节数组小于读取的长度,且数据已经读取完了。则这个时候返回的是-1
    public int read(byte[] int off,int len) throws IOException读取指定多个字节数据

    我们还是看看读取内容,具体代码怎么去实现它:

    import java.io.*;public class test {    public static void main(String[] args) throws Exception{        File file=new File("e:"+File.separator+"JavaLearn"+File.separator+"EleventhDemo"+File.separator+"1.txt");        if (!file.getParentFile().exists()){            file.getParentFile().mkdirs();            System.out.println("父级目录创建成功");        }        if(file.exists()){InputStream input=new FileInputStream(file);byte data[] = new byte[1024];// 开辟一个1024长度的byte数组int len=input,read(data);input.close();System.out.println("读取的内容:"+new String(data,0,lem));}        }}

    上述代码简明的表达了读取文件的全部内容的逻辑,但是想象一下,单个单个的读取怎么做呢?

    这时候需要一点以前的知识了,看看代码:

    import java.io.*;public class test {    public static void main(String[] args) throws Exception{        File file=new File("e:"+File.separator+"JavaLearn"+File.separator+"EleventhDemo"+File.separator+"1.txt");        if (!file.getParentFile().exists()){            file.getParentFile().mkdirs();            System.out.println("父级目录创建成功");        }        if(file.exists()){        InputStream input=new FileInputStream(file);        byte data[] = new data[1024];        int foot=0;// 数组的索引初始值        int temp=0;// 待会自己看是啥作用        while((temp=input.read())!=-1){        data[foot++]=(byte) temp;        input.close();        System.out.println("读取到的数据是:"+new String(data,0,foot));}}        }}

    了解了字节输入流,是不是还得了解一下字符输入流。来吧,也别愣着了,码代码呗;

    字符输入流Reader

    那些啥抽象啊,子类啊啥的我都不说了,反正类似,自己慢慢琢磨琢磨。

    看看有哪些方法:

    方法描述
    public abstract void close() throws IOException关闭流
    public int read() throws IOException读取单个字符
    public int read(char[] cbuf) throws IOException将内容读到字符数组中,返回读入的长度

    有一点和上面的不一样:

    虽然Writer类中提供了输出字符串数据的操作方法,但是在Reader类中并没有这样的定义。之所以会这个样子,完全是因为在使用OutputStream输出数据时,其程序可以输出的大小一定是程序可以承受的数据大小,如果在使用InputStream读取时,可能被读取的数据灰常大,一次性全部读取的话可能会问题,于是就只有一个一个的读取

    import java.io.*;public class test {    public static void main(String[] args) throws Exception{        File file=new File("e:"+File.separator+"JavaLearn"+File.separator+"EleventhDemo"+File.separator+"1.txt");        if (!file.getParentFile().exists()){            file.getParentFile().mkdirs();            System.out.println("父级目录创建成功");        }        Reader in=new FileReader(file);        char data[] = new char[1024];        int len=in.read(data);        in.close();        System.out.println("读取的内容:"+new String(data,0,len));        }}

    代码写了这么一大堆,我们最后再看看一个问题;

    字节流和字符流的区别

    通过以上的代码演示我们知道了,字节流和字符流都有类似的功能,那么在开发的过程中具体使用哪一种呢?

    他们的区别在于:

    字节流在进行IO操作时,直接针对的时操作的数据终端(如文件),而字符流操作时不是直接针对于终端,而是针对于缓存区(理解为内存)的操作,而后由缓存区来操作终端(如文件),这属于间接操作,按照这样的方式,如果在使用字节流时不关闭最后的输出操作,也可以将所有的内容进行输出,而使用字符流时如果不关闭,则意味着缓冲区的内容不会被输出,当然,这个时候可以由用户自己调用flush()方法去强制性的手动清空 例如:

    import java.io.*;public class test {    public static void main(String[] args) throws Exception{        File file=new File("e:"+File.separator+"JavaLearn"+File.separator+"EleventhDemo"+File.separator+"1.txt");        if (!file.getParentFile().exists()){            file.getParentFile().mkdirs();            System.out.println("父级目录创建成功");        }        if (!file.exists()){            file.createNewFile();        }        Writer out=new FileWriter(file);        String data="Hello World!";        out.write(data);        out.flush();        }}

    总结一下,字节流和字符流的主要区别:

    • 字节流没有使用到缓冲区,而字符流使用了;

    • 处理各种数据都可以通过字节流完成,而在处理中午的时候使用字符流会更方便;

    最后,留一个思考题给有兴趣的小伙伴。

    现有一个要求,按照DOS系统的文件拷贝命令,由初始化参数输入源文件和拷贝文件的路径,而后执行操作。

    提示:本程序直接在主方法中完成,不考虑多余的方法和类的设计。考虑大文件的情况(500MB以上)

    我把思路也贴给大家:

    方案一:将要复制的文件全部读取到内存中,而后将所有的内容一次性输出到目标文件;

    方案二:采用边读边写的方式一点一点的进行文件的复制。

    “Java中的字节和字符输入流的简单介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: Java中的字节和字符输入流的简单介绍

    本文链接: https://lsjlt.com/news/298871.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Java中的字节和字符输入流的简单介绍
      本篇内容介绍了“Java中的字节和字符输入流的简单介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录字节输出流OutputStream字...
      99+
      2023-06-20
    • Java中的字节,字符输出流与字节和字符输入流的简单理解
      目录字节输出流OutputStream字符输出流字节输入流InputStream字符输入流Reader字节流和字符流的区别总结我先解释一下什么叫IO流: I:指的是Inpu...
      99+
      2024-04-02
    • Java中字节流和字符流的理解(超精简!)
      目录引言 字节流和字符流 字节流 字节输入流 字节输出流 字符流字符输入流 字符输出流 附:字节流和字符流的区别...
      99+
      2024-04-02
    • 关于java中I/O流的字节流与字符流的详细介绍
      一、绪论如果要进行文件内容的操作那么必须依靠数据流完成,而数据流分为两种:字节流:InputStream(字节输入流)、OutputStream(字节输出流);字符流:Reader(字符输入流)、Writer(字符输出流);二、区别字节流是...
      99+
      2017-12-15
      java教程 java I/O 字节流 字符流
    • java中的字符流和字节流的区别
      字节流Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了组基本的输入字节流和输出字节流。InputStream类与Outp...
      99+
      2020-11-28
      java入门 java 字符流 字节流 区别
    • java字节流和字符流的区别
      java中什么是字节流?Java中的字节流有助于执行8位字节的输入和输出操作;它以stream结尾。换句话说,它逐字节处理数据,适用于处理二进制文件等原始数据。 (推荐...
      99+
      2015-08-27
      java教程 java
    • java字符流和字节流的区别
      字符流:就是在字节流的基础上,加上编码,形成的数据流字符流出现的意义:因为字节流在操作字符时,可能会有中文导致的乱码,所以由字节流引申出了字符流。程序中所有的数据都是以流的方式进行传输或保存的,字节流主要操作type类型的数据,以type数...
      99+
      2022-01-19
      java基础 java
    • 达梦数据库中字符和字节的介绍
      参数简介 在使用DMINIT初始化数据库的时候,我们有以下这两个跟字符集有关的参数,UNICODE_FLAG和LENGTH_IN_CHAR。 UNICODE_FALG : 此参数表示了数据库中所有...
      99+
      2024-04-02
    • 怎么进行java字符串的简单介绍
      本篇文章给大家分享的是有关怎么进行java字符串的简单介绍,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。java字符串你可能注意到了,在前面关于数据类型和数组的讨论中没有提到字...
      99+
      2023-06-03
    • 简单讲解Python中的字符串与字符串的输入输出
      字符串 字符串用''或者""括起来,如果字符串内部有‘或者",需要使用进行转义 >>> print 'I'm ok.' I'm ok. 转义字符可以转义很多字符,比如n表示换行,...
      99+
      2022-06-04
      字符串 输入输出 简单
    • Java IO流 - 字节流的使用详细介绍
      文章目录 IO流的基本介绍字节流的使用文件字节输入流创建字节输入流每次读取一个字节每次读取一个数组一次读取全部字节 文件字节输出流创建字节输出流写入文件输出流 文件拷贝练习 ...
      99+
      2023-09-16
      java jvm 前端
    • Java字节流和字符流及IO流的总结
      目录从接收输入值说起字节流读取字符流读取Scanner 读取什么是 IO 流字节流和字符流RandomAccessFile从接收输入值说起 在日常的开发应用中,有时候需要直接接收外部...
      99+
      2024-04-02
    • 【Java IO流】字节流和字符流的实例讲解
      字节流和字符流对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流。从对文件的操作来讲,有读和写的操作——也就是输入和输出。从流的流向来讲,有输入和输出之分。从流的内容来讲,有字节和字符之分。这篇文章先后讲解IO流中...
      99+
      2023-05-31
      字符流 字节流 java
    • 图文详解Java中的字节输入与输出流
      目录字节输入流 字节输入流结构图FileInputStream类构造方法:常用读取方法:字节输出流 字节输出流结构图:FileOutputStream类构造方法:常用写入方法:总结字节输入流 java.io.InputStream抽象类是...
      99+
      2017-02-14
      java字节输入流和输出流 java文件输入输出字符流 java字节流
    • Java IO中字节输入输出流的示例分析
      这篇文章主要介绍Java IO中字节输入输出流的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!讲的是字节输入输出流:InputStream、OutputSteam(下图红色长方形框内),红色椭圆框内...
      99+
      2023-06-26
    • JAVA中IO操作的字节流和字符流实例分析
      这篇文章主要介绍了JAVA中IO操作的字节流和字符流实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JAVA中IO操作的字节流和字符流实例分析文章都会有所收获,下面我们一起来看看吧。IO操作字节流java...
      99+
      2023-06-29
    • 详解Java中字符流与字节流的区别
      Java中字符流与字节流的区别1. 什么是流    Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列。和水流一样,Java中的流也具有一个“流动的方向”,...
      99+
      2023-05-31
      java 字符流 字节流
    • java中的转义字符介绍
      java中的转义字符有四种: JAVA中转义字符: 1.八进制转义序列: + 1到3位5数字;范围'00'~'377':空字符 2.Unicode转义字符:u + 四个十六进制数字;...
      99+
      2022-11-15
      java 转义字符
    • java字节和字符的区别
      字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示,1B(byte,字节)=8bit(位)字符(char):是指计算机中使用的字母、数字、字和符号。依据字符不同的编码格式,每个字符单位对应的字节数是不一样的。字节和字符的关...
      99+
      2016-06-07
      java教程 java
    • Java和C#的字符串类型介绍
      这篇文章主要介绍“Java和C#的字符串类型介绍”,在日常操作中,相信很多人在Java和C#的字符串类型介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java和C#的字符串类型介绍”的疑惑有所帮助!接下来...
      99+
      2023-06-17
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作