栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

1、流的概念
Java 语言采用流的机制来实现输入/输出。
所谓流,就是数据的有序排列。
而流可以是从某个源(称为流源,Source of Stream)出来,
到某个目的地(称为流汇 ,Sink of Stream)去的。
1.1、流的分类
  1. 流向分:输入流、输出流
  2. 流源分:字符流、字节流
  3. 功能分:节点流、处理流

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

1.2、流的处理过程

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

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

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


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

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

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

4、Reader 和 Writer

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();
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329038.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号