首页 > 编程语言 >java IO流

java IO流

时间:2023-12-08 20:44:57浏览次数:43  
标签:java 字节 buffer IO new os String

  • I :input , 输入流 , 从磁盘文件读数据到内存
  • O : Output , 输出流 , 从内存写数据到磁盘文件

1. IO流分类

  • 字节流:最小读取单位为字节,更适合读音视频文件
  • 字符流:最小读取单位为字符,更适合读文本内容

2. 文件字节输入流

(1).每次读取一个字节

缺点:效率低每次只能读一个字节且不能读中文。中文在jbk下是两个字节,utf-8下是三个字节,其读取中文会乱码

(2).每次读取一个字节数组


(3).一次性读完全部字节

3. 文件字节输出流

public static void main(String[] args) throws Exception
	{
		//创建一个文件字节输出流
		//会自动创建文件
		OutputStream os = new FileOutputStream(new File("C:\\files\\poems\\李白诗3.txt"));
		
		//写数据出去
		os.write('a'); //写一个字节
		
		byte[]buffer = {'a',97,98,99}; //写一个数组进去
		os.write(buffer);
		
		byte[]buffe2 = "我和我的祖国".getBytes(); //写中文
		os.write(buffe2);
		
		//写数据必须刷新
		os.flush();
		
		//关闭流
		os.close();
		
	}

4. 文件拷贝

public static void main(String[] args) throws Exception
	{
		//将poem文件拷贝到李白诗集文件
		InputStream is = new FileInputStream("C:\\java作业\\2022013281王英和\\src\\poem.txt");
		OutputStream os = new FileOutputStream("C:\\java作业\\2022013281王英和\\src\\李白诗集.txt");
		
		//输入流将文件输入到内存(数组)中
		byte[] buffer = is.readAllBytes();
		//输出流将内存(数组)数据输出到文件中
		os.write(buffer);
	} 

5. 文件字符输入流

文件字符输入流 : Reder

(1). 每次读取一个字符

FileReader fr = new FileReader("C:\\java作业\\2022013281王英和\\src\\poem.txt");
		
		int len;
		while((len = fr.read())!= -1)
		{
			System.out.print((char)len);
		}

(2). 每次读取一个字符数组

FileReader fr = new FileReader("C:\\java作业\\2022013281王英和\\src\\poem.txt");
		
		char []buffer = new char[1024];
		int len;
		while((len = fr.read(buffer))!= -1)
		{
			String rs = new String (buffer,0,len);
			System.out.print(buffer);
		}

6. 文件字符输出流

文件字符输出流:FileWriter

Writer fw = new FileWriter("C:\\java作业\\2022013281王英和\\src\\李白诗集.txt");
		
		char[] buffer = "我爱你中国".toCharArray();
		//输出流将内存(数组)数据输出到文件中
		fw.write(buffer);
		
		fw.flush();
		fw.close();

7. 缓冲流

(1). 字节缓冲流

public static void main(String[] args) throws Exception
	{
		InputStream is = new FileInputStream("C:\\java作业\\2022013281王英和\\src\\poem.txt");
		InputStream bis = new BufferedInputStream(is);
		
		OutputStream os = new FileOutputStream("C:\\java作业\\2022013281王英和\\src\\李白诗集.txt");
		OutputStream bos = new BufferedOutputStream(os);
		
		byte[] buffer = is.readAllBytes();
		os.write(buffer);
	} 

(2). 字符缓冲流

public static void main(String[] args) throws Exception
	{
		Reader is = new FileReader("C:\\java作业\\2022013281王英和\\src\\poem.txt");
		Reader bis = new BufferedReader(is);
		
		Writer os = new FileWriter("C:\\java作业\\2022013281王英和\\src\\李白诗集.txt");
		Writer bos = new BufferedWriter(os);
		
	    char[] buffer = new char[10];
	    int len;
	    while((len = bis.read(buffer))!=-1)
	    {
	    	bos.write(buffer,0,len);
	    }
	    
	    bos.flush();
	    bos.close();
	} 

8. 对象序列化和反序列化

(1). 对象序列化

对象序列化: 以内存为基准,把内存中的对象存储到磁盘文件中去,称为对象序列化
使用对象字节输出流:objectOutputStream

//想序列化必须实现这个接口
public class Student implements Serializable 
{
	int stuID;
	String name;
	String address;
	
	public Student(int stuID,String name,String address)
	{
		this.stuID = stuID;this.name = name;
		this.address = address;
	}
};
public class serialize  {
	
	public static void main(String[]args) throws Exception
	{
		Student s = new Student(1,"abc","xxxx");
	
		ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("C:\\java作业\\2022013281王英和\\dest\\1.txt"));
		
		os.writeObject(s);
	}
}

(2). 对象反序列化

public static void main(String[]args) throws Exception
{
	//反序列化
	ObjectInputStream is = new ObjectInputStream(new FileInputStream("C:\\java作业\\2022013281王英和\\dest\\1.txt"));
	Student s1 = (Student)is.readObject();
		
	System.out.println(s1);
}

标签:java,字节,buffer,IO,new,os,String
From: https://www.cnblogs.com/algoshimo/p/17884266.html

相关文章

  • PSI - Pressure Stall Information (压力停滞信息) 【ChatGPT】
    原文:https://www.kernel.org/doc/html/v6.6/accounting/psi.html#psi日期2018年4月作者[email protected]当CPU、内存或IO设备争用时,工作负载会出现延迟峰值、吞吐量损失,并面临OOM杀死的风险。缺乏对这种争用的准确衡量,用户不得不在谨慎使用硬件资源或频繁......
  • 电商系统针对 High DTU Consumption 的应对措施
    电商系统处理"flashsale"(限时抢购)时遇到的HighDTU(DatabaseTransactionUnit)consumption是一个常见而严峻的挑战。在这种情况下,大量用户涌入系统,同时尝试抢购特价商品,导致数据库负载急剧增加。为了更好地理解和解决这个问题,让我们首先深入了解电商系统、"flashsale"活动以......
  • 电商系统处理 flash sale 时遇到的 High DTU consumption 问题
    在电商系统中,"flashsale"或"限时促销"是一种常见的销售策略,它通常吸引大量用户在短时间内进行购买操作。然而,这种情况也会对系统的数据库资源产生巨大压力,尤其是在处理"HighDTUconsumption"的时候。首先,我们来定义一下HighDTUconsumption。在AzureSQL数据库......
  • devops - 在企业内使用verdaccio 搭建npm私有源
    verdaccio是一个基于nodejs的轻量化的私有源.在远程服务器的操作:1.安装和配置verdaccio全局安装verdaccionpminstall-gverdaccio配置文件路径~/.config/verdaccio/config.yaml配置远程访问listen:0.0.0.0:48732.运行verdaccio直接运行verdaccioverdaccio......
  • ICBCB 生物信息学与计算生物学国际会议(The 10th International Conference on Bioi
     十届生物信息学与计算生物学国际会议(ICBCB2022)成功举办 编辑:张谊来源:生命科学学院时间:2022年05月20日访问次数:2197  2022年5月13-15日,由浙江大学生命科学学院主办的第十届生物信息学与计算生物学国际会议(The10thInternationalConferenceonBioinformaticsand......
  • 生物信息学和生物医学技术国际会议(ICBBT---International Conference on Bioinformat
    2021年第十三届生物信息学和生物医学技术国际会议(ICBBT2021)发布时间:2020/11/617:17:56作者:新用户(ID:253063)阅读:517会议官网:http://www.icbbt.org/会议时间:2021年05月21日截稿时间:2020年12月20日会议地点:中国,西安收录检索: Ei_Compendex、 Scopus2021年第十三届生......
  • 生物信息学与生物医学科学国际会议 (Inthernational Conference on Bioinformatics an
      。 01会议介绍生物信息学与生物医学科学国际会议(InthernationalConferenceonBioinformaticsandBiomedicalScience,ICBBS)每年举办一届,此前已在厦门(线上)、北京、深圳、曼谷、吉隆坡、哥本哈根、巴厘岛、新加坡成功举办,2021年第10届会议将在福建厦门线上举......
  • 生物信息学与智能计算国际学术研讨会 (BIC Bioinformatics and Intelligent Comput
     BIC2021:2021InternationalConferenceonBioinformaticsand IntelligentComputing, HarbinChina January22-24,2021 第二届生物信息学与智能计算国际学术研讨会 (BIC2022)  2022年01月20-22日  中国·三亚  会议重要日期    截稿时间:202......
  • 通俗易懂的 Axios 拦截器指南:提升前端开发效率的利器
    Axios 提供了一种称为 “拦截器(interceptors)” 的功能,使我们能够在请求或响应被发送或处理之前对它们进行全局处理。拦截器为我们提供了一种简洁而强大的方式来转换请求和响应、进行错误处理、添加认证信息等操作。在本文中,我们将深入探讨如何使用Axios的拦截器,并提供一个实际......
  • #yyds干货盘点#Java面试题
    1.如何理解面向对象和面向过程【面向过程】:完成某件事的过程,性能高于【面向对象】优点:但是因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展【面向对象】:把要完......