Java中流的有关知识点详解

作者:mumu1998 时间:2022-07-21 15:38:21 

什么是流?

流:程序和设备之间连接起来的一根用于数据传输的管道,流就是一根管道。

流的分类:

  • 四大基本抽象流(输入流,输出流,字符流,字节流)

  • 文件流

  • 缓冲流

  • 转换流

  • 数据流     流一定是类,但类不一定是流

  • print流

  • object流

按数据流的方向不同可以分为输入流和输出流。

按处理数据单位不同可以分为字节流和字符流。(一个字符是两个字节)

按功能不同可以分为节点(原始)流和处理(包裹)流。

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


文件流:

读取一个文件内容并将其输出到显示器上,并统计读取出来的字节的个数。字符串来表示操作系统的文件路径时,我们可以使用\\和/两种方式来作为文件夹的路径分隔符。

什么是字节流?

FileInputStream       FileOutputStream

什么是字符流?

FileReader       FileWriter  


eg:
import java.awt.*;
public class test{
  public static void main(String[] args){
   FileReader fr=new FileRead("D:\\share\\test.java");
   FileWriter fw=new FileWrite("d:/zhangsan.haha");
  int ch;
      ch=fr.read();
while(-1 != ch){
    fw.write(ch); //将test文件中fr的数据读给程序,再将程序中的数据写给fw的zhangsan文件夹中
    ch=fr.read();
}
 fw.flush();
 fr.close();
 fw.close();
}
}

字符流和字节流的区别:

字节流可以完成所有格式文件的赋值

字符流值可以完成文本文件的复制,却无法完成视频格式文件的复制。

因为字节是不需要解码和编码的,将字节转化为字符才存在解码和编码的问题。

字节流可以从所有格式的设备中读取数据,但字符流只能从文本格式的设备中读写数据。如果通过一个字节流把文本文件的内容输出到显示器上,当输出汉字时就会出现乱码。

缓冲流:Buffered

缓冲流就是带有缓冲区的输入输出流

缓冲流可以显著的减少我们对IO访问的次数,保护我们的硬盘。

缓冲流本身就是处理流,必须依附于节点流,处理流是包裹在原始节点上的流,相当于包括在管道上的管道。

BufferedInputStream :带缓冲的输出流,允许一次向硬盘写入多个字节的数据

BufferedOutputStream :带缓冲区的输入流,允许一次向程序中读入多个字节的数据

BufferedWriter BufferedReader可以提高读写文本文件内容的速度


eg:
import java.awt.*;//带缓冲区的字节流处理文件的速度要快于不带缓冲区的字节流。
public class test{
  public static void main(String[] args){
  BufferedInputStream bis=new BufferedInputStream (new FileRead("D:\\share\\test.java"));
   BufferedOutputStream bos= new BufferedOutputStream (new FileWrite("d:/zhangsan.haha"));
byte[] buf=new byte[1024];
  int len;
    len=bis.read(buf);
while(-1 != len){
    bos.write(buf,0,len );
    len=bis.read(buf);
}
 bos.flush();
 bos.close();
 bis.close();
}
}

转换流:

outputStreamWrite 流是把OutputStrean流转换成Writer流的流

inputStreamReader 流是把inputStrean流转换成Reader流的流

print流:

print流只有输出,没有输入

PrintWriter 输出字符    PrintStream输出字节

printWriter 与 printStream的区别:

printWriter提供了PrintStream的所有打印方法,既可以封装OutputStream,也能封装Writer.而PrintStream只能封装OutputStream类型的字节流。

标准输入输出的重定向:

编程实现将键盘输入的数据输入到A文件中,如果输入有误,则把出错信息输出到B文件中。


eg:
public class test{
   public static void main(String[] args){
  PrintStream psOut=null;
  PrintStream psError=null;
 Scanner sc=null;
    try{
    psOut=new PrintStream("d:/Out.txt");
    psError=new PrintStream("d:/error.txt");
 sc=new Scanner(System.in);
  int num;
  System.setOut(psOut);
 System.setErr(psError);
 while(true){
  num=sc.nextInt();
 System.out.println(num);
 }
}  
catch(Exception e){
 System.out.println("出错信息是:");
 e.printStackTrace();
}
}
}
}

来源:https://blog.csdn.net/mumu1998/article/details/81670581

标签:java,文件流,抽象流,缓冲流,转换流,数据流
0
投稿

猜你喜欢

  • Android中创建对话框(确定取消对话框、单选对话框、多选对话框)实例代码

    2023-07-04 01:48:25
  • 记一次springboot服务凌晨无故宕机问题的解决

    2023-07-25 04:50:23
  • C#设置自定义文件图标实现双击启动(修改注册表)

    2023-08-21 08:43:46
  • c# winform时钟的实现代码

    2023-04-05 07:40:53
  • C#中使用快速排序按文件创建时间将文件排序的源码

    2023-06-04 08:19:19
  • SpringBoot微信消息接口配置详解

    2023-08-23 09:51:21
  • Android Button 自带阴影效果另一种解决办法

    2021-06-07 04:23:02
  • java 实现将Object类型转换为int类型

    2023-11-11 07:58:03
  • java并发编程之ThreadLocal详解

    2023-03-15 11:44:33
  • 基于SpringBoot实现用户身份验证工具

    2022-05-08 18:37:29
  • IDEA SpringBoot项目配置热更新的步骤详解(无需每次手动重启服务器)

    2023-11-12 00:22:41
  • Java读取properties配置文件的8种方式汇总

    2022-05-03 17:11:34
  • Java实战之用springboot+netty实现简单的一对一聊天

    2023-12-03 07:28:19
  • Springboot之idea之pom文件图标不对问题

    2021-12-31 07:27:32
  • Swagger2配置方式(解决404报错)

    2022-08-30 17:21:13
  • Android自定义viewGroup实现点击动画效果

    2022-09-01 00:27:07
  • SpringBoot之webflux全面解析

    2022-09-27 12:07:20
  • springboot配置aop切面日志打印过程解析

    2022-07-10 13:14:09
  • 关于eclipse安装spring插件报错An error occurred while collecting items to be installed...解决方案

    2023-05-27 03:34:45
  • java 多态性详解及简单实例

    2021-10-06 23:29:50
  • asp之家 软件编程 m.aspxhome.com