首页 > 编程语言 >Java基础-学习笔记17

Java基础-学习笔记17

时间:2024-09-09 16:26:52浏览次数:8  
标签:文件 Java 17 System 笔记 println new 序列化 out

17 IO流

1. IO流

  • 文件

文件在程序中是以流的形式来操作的。

:数据在数据源(文件)和程序(内存)之间经历的路径
输入流:数据从数据源(文件)到程序(内存)的路径
输出流:数据从程序(内存)到数据源(文件)的路径

  • 常用的文件操作

  • 获取文件的相关信息

  • IO流原理及流的分类

I/O (Input/Output) 技术,用于处理数据传输。如读/写文件,网络通讯等。

* 按操作数据单位:
    * 字节流(8 bit)(方便二进制文件操作)(以字节为单位读取)
    * 字符流(方便文本文件操作)(按字符为单位)
* 按数据流的流向:
  * 输入流
  * 输出流
* 按流的角色:
  * 节点流
  * 处理流/包装流

  • 对象流

ObjectOutputStream 提供序列化功能(序列化:保存数据的值和数据类型)
ObjectInputStream 提供反序列化功能(反序列化:恢复数据的值和数据类型)

需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,该类必须实现两个接口之一:

Serializable // 这是一个标记接口,没有方法
Externalizable // 该接口有方法需要实现,因此一般都实现 Serializable 接口
String filePath = "C:\\CloudMusic\\try.dat"; // 这里后缀不管定义什么,最后都会按Java自己的后缀dat保存

ObjectOutputStream ois = new ObjectOutputStream(new FileOutputStream(filePath));
ois.writeInt(100);
ois.writeBoolean(true);
ois.writeUTF("韩顺平");
ois.writeObject(new User(10,27,"ZhangSan"));
ois.close();
System.out.println("ok=========");

ObjectInputStream ois2 = new ObjectInputStream(new FileInputStream(filePath));
System.out.println(ois2.readInt()); // 100
System.out.println(ois2.readBoolean()); // true
System.out.println(ois2.readUTF()); // 韩顺平 
User us1 = (User)ois2.readObject(); // 注:User对象要实现Serializable接口。且对本类来说,拥有可引用的权限,才能正确读取
System.out.println(us1); // User{id=10, age=27, name='ZhangSan'}
System.out.println(us1.getName()); // ZhangSan
ois2.close();

使用细节:

1) 读写顺序要一致
2)要求序列化或反序列化的对象,要实现 Serializable
3)序列化的类中建议添加 SerialVersionUID,为了提高版本的兼容性
4)序列化对象时,默认将里面所有属性都进行序列化,但除了 static 或 transient 修饰的成员
5)序列化对象时,要求里面属性的类型也需要实现序列化接口
6)序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化

  • 标准输入输出流

System.in
      编译类型:InputStream
      运行类型:BufferedInputStream

System.out
      编译类型:PrintStream
      运行类型:PrintStream

  • 转换流

解决文件乱码问题

InputStreamReader:Reader 的子类,可以将 InputStream(字节流) 包装/转换成 Reader(字符流)

OutputStreamWriter:Writer 的子类,实现将 OutputStream(字节流) 包装/转换成 Writer(字符流)

当处理纯文本数据时,如果使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换为字符流

字节流文件可以在使用时指定编码格式(比如 utf-8, gbk, gb2312, ISO8859-1 等),再通过转换流转成字符流

  • 打印流

打印流只有输出流,没有输入流

在默认情况下,PrintStream 输出数据的位置是 标准输出,即显示器
可以自己修改打印流输出的位置/设备

System.setOut(new PrintStream("C:\\CloudMusic\\test.txt"));// 修改输出到文件
System.out.println("hello, 韩顺平教育~");

2. Properties 类

  • 基本介绍
    Properties 类是 HashTable 的一个子类,专门用于读写配置文件的集合类,配置文件的格式:
    键=值
    键=值
    (注意:键值对不需要有空格,值不需要用引号引起来,默认类型是 String

  • 常见方法

标签:文件,Java,17,System,笔记,println,new,序列化,out
From: https://www.cnblogs.com/97gogo/p/18394951

相关文章

  • 2-3Java继承
    Java继承继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。生活中的继承:兔子和羊属于食草动物类,狮子和豹属于食肉......
  • JavaScript 基础知识
    概述        在Web前端开发中,JavaScript是一种脚本语言,主要用于实现网页的动态功能和交互效果。与HTML和CSS主要关注网页的结构和样式不同,JavaScript可以用于以下方面:动态内容更新:通过JavaScript,可以在不重新加载页面的情况下更新网页上的内容。例如,用户点击......
  • Java----字符串(String)
    一、什么是字符串?定义:字符串是一个或多个字符的序列在java中用char数组来表示字符串,我们可以从源码看到:java对char数组进行了封装,并用String类型来表达字符串,也就是说java程序中所有字符串的文字都被成为此类的对象。#java8源码/**Thevalueisusedforcharacterst......
  • java 多态
    面向对象三大特性:封装、继承、多态,今天我们来讲解多态定义:同类型的对象表现出不同的形态    这听起来有点抽象,我们举个具体的例子:    假设你开了一家宠物店,提供宠物寄养的服务,于是你规定可以给寄养所有的波斯猫,附近的居民都把宠物寄养在这里://参数是哈......
  • 《基于超声的深度学习模型用于降低BI-RADS 4A乳腺病变的恶性率》论文笔记 MobileNet
    《APPLICATIONOFDEEPLEARNINGTOREDUCETHERATEOFMALIGNANCYAMONGBI-RADS4ABREASTLESIONSBASEDONULTRASONOGRAPHY》《基于超声的深度学习模型用于降低BI-RADS4A乳腺病变的恶性率》原文地址:链接文章目录摘要简介方法患者图像获取与处理深度学习模型统计分析结果讨论......
  • JavaScript 事件循环
    0x01事件循环JavaScript是单线程的,即同一时间内仅能执行一个操作在单线程中,当一段代码中存在需要等待或触发的任务时,会阻塞线程,影响后续代码的执行,因此需要将代码分为同步和异步,其执行过程如下:flowchartLR代码--同步-->JS引擎-->执行栈--立即执行-->执行栈代码--异步-......
  • 集合底层学习笔记
    集合的底层原理数据结构中有数组和链表来实现对数据的存储,但这两者基本上就是两个极端。数组:数组存储区间是连续的,占用内存严重,故空间复杂度很大。但数组的二分查找时间复杂度很小,为O(1);数组的特点是:寻址容易,插入和删除困难。链表:链表存储区间不连续,占用内存比较宽松,故空......
  • 【Spark+Hive】基于大数据招聘数据分析预测推荐系统(完整系统源码+数据库+开发笔记+详
    文章目录【Spark+Hive】基于大数据招聘数据分析预测推荐系统(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)源码获取方式在文章末尾一、 项目概述二、研究意义三、背景四、国内外研究现状五、开发技术介绍六、算法介绍 七、数据库设计八、系统......
  • [Javascript] Function.prototype.call
    .callmethodexitsonanyfunction,whichwillreferto Function.prototype.callforexample:console.log.call===Function.prototype.call//call AlsoitmeansthatFunction.prototype.call===Function.prototype.call.call Question:console.log.call.cal......
  • JVM(Java Virtual Machine,Java 虚拟机)
    JVM(JavaVirtualMachine,Java虚拟机)是Java程序运行的虚拟计算机,它是一个抽象计算机的概念,为Java程序提供了一个与平台无关的执行环境。JVM负责加载Java类文件,执行字节码,并提供运行时环境,包括内存管理、垃圾回收等。JVM主要由四大部分组成:ClassLoader(类加载器):负责加载......