学会Java输入输出流,看这一篇就够了,建议收藏!

简介: 学会Java输入输出流,看这一篇就够了,建议收藏!

1、流的概念

Java 语言采用流的机制来实现输入/输出。
所谓流,就是数据的有序排列。
而流可以是从某个源(称为流源,Source of Stream)出来,
到某个目的地(称为流汇 ,Sink of Stream)去的。

1.1、流的分类

流向分:输入流、输出流

流源分:字符流、字节流

功能分:节点流、处理流

java 中统一将流的类放在 java.io 包下。


1.2、流的处理过程

用来处理流的类又叫做流处理器。


例如:Java 中可以使用 FileInputStream 从一个文件中读取数据,FileInputStream 就是一个流处理器


image.png


类似的也可以通过FileOutputStream向一个文件中写入数据。

image.png

Java 中提供了一种称作为链接的机制,可以将一个流处理器与另一个流处理器首尾相连,形成一个流管道的链接。

image.png

类似的也可以向一个文件中写入数据

image.png


2、常用流的使用

FileInputStream和FileOutputStream:用于读取和写入诸如图像数据之类的原始字节流

public static void main(String[] args){
  try{
  File oldFile=new File("D:\\SoftMgr\\img.jpg");//从本地获取文件对象
  File newFile=new File("D:\\SoftMgr\\new.jpg");//写入本地路径新文件
  FileInputStream in=new FileInputStream(oldFile);//用输入流读取文件的内容
  FileOutputStream out=new FileOutputStream(newFile);//用输出流把内容写入新文件
  int len=0;
  //如果没有读到文件某尾(-1代表读到文件某尾),输出流持续写
  while((len=in.read())!=-1){
    out.write(len);
  }
  //流用完后必须要关闭,先打开的后关闭,后打开的先关闭
  out.close();
  in.close();
  }catch(FileNotFoundException e){
  e.printStackTrace();
  }catch(IOException e){
  e.printStackTrace();
  }
}

ObjectInputStream和ObjectOutputStream:


对象流,ObjectOutputStream 和ObjectInputStream 分别与FileOutputStream 和FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久存储。


ObjectInputStream 用于恢复那些以前序列化的对象。ObjectInputStream 对以前使用ObjectOutputStream 写入的基本数据和对象进行反序列化。


//将对象保存到文件必须实现Serializable序列化接口
@SuppressWarnings("serial")
public class User implements Serializable {
  private String name;
  private int age;
  public User(String name, int age) {
    super();
    this.name = name;
    this.age = age; 
  }
  public String getName() {
    return name; 
  }
  public int getAge() {
    return age; 
  } 
}
public class TestObjectStream {
  public static void writeObject(Object o) {
  FileOutputStream file;
  try {
    file = new FileOutputStream("E:\\img\\obj.dat");// 对象保存到本地.dat文件
    ObjectOutputStream out = new ObjectOutputStream(file);
    out.writeObject(o);
    out.flush();
    out.close();
  } catch (Exception e) {
    e.printStackTrace();
  } 
  }
  public static Object readObject(String path) {
  Object obj = null;
  try {
    FileInputStream file = new FileInputStream(path);
    ObjectInputStream in = new ObjectInputStream(file);
    obj = in.readObject();
    in.close();
  } catch (Exception e) {
    e.printStackTrace();
  }
  return obj; 
  }
  public static void main(String[] args) {
  // writeObject(new User("jack", 35));
  User user = (User) readObject("E:\\img\\obj.dat");
  System.out.println("name:" + user.getName());
  System.out.println("age:" + user.getAge());
  } 
}

3、InputStream 和 OutputStream

image.png


4、Reader 和 Writer

image.png


5、节点流和处理流

节点流(原始流):可以从或向一个特定的地方(节点)读写数据。如FileReader.

处理流(链接流):是对一个已存在的流的连接和封装,
通过所封装的流的功能调用实现数据读写。
如BufferedReader处理流的构造方法总是要带一个其他的流对象做参数。
一个流对象经过其他流的多次包装,称为流的链接。

6、通过URL读取流

URL类:代表一个统一资源定位符,它是指向互联网“资源”的指针。

public static void main(String[] args){
  try{
  URL url=new URL("https://127.0.0.1:8090/SoftMgr/dzh.jpg");
  InputStream in=url.openStream();
  FileOutputStream out=new FileOutputStream("D:\\SoftMgr\\dyw.jpg");
  int len=0;
  byte[] bs=new byte[1024];
  while((len=in.read(bs))!=-1){
    out.write(bs,0,len);
  }
  out.flush();
  out.close();
  in.close();
  }catch(Exception e){
  e.printStackTrace();
  }
}
目录
相关文章
|
7月前
|
缓存 Java
JAVA带缓存的输入输出流
JAVA带缓存的输入输出流
94 0
|
7月前
|
Java
JAVA基本数据类型输入输出流
JAVA基本数据类型输入输出流
46 0
|
6月前
|
Java
【Java基础】输入输出流(IO流)
Java基础、输入输出流、IO流、流的概念、输入输出流的类层次结构图、使用 InputStream 和 OutputStream流类、使用 Reader 和 Writer 流类
172 2
|
5月前
|
Java 数据库
Java面试题:请解释Java中的输入输出(I/O)流?详细说明应用场景
Java面试题:请解释Java中的输入输出(I/O)流?详细说明应用场景
35 0
|
7月前
|
存储 Java 开发者
Java的输入输出流:字节流与字符流的技术性探讨
Java的输入输出流:字节流与字符流的技术性探讨
45 0
|
7月前
|
Java API
Java从入门到精通:2.1.4深入学习Java核心技术——Java的输入输出流
Java从入门到精通:2.1.4深入学习Java核心技术——Java的输入输出流
|
7月前
|
Java
Java输入输出流详细解析
Java输入输出流详细解析
Java输入输出流详细解析
|
7月前
|
Java
JAVA输入输出流
JAVA输入输出流
36 1
JAVA 输入输出流 本地文件读写
JAVA 输入输出流 本地文件读写
|
存储 Java 编译器
java之九 基本输入输出流
java之九 基本输入输出流
42 0