文件和IO
java基础2篇连载
File
- File:文件 & 文件夹
- 文件操作:创建、删除、控制
- 文件夹操作:创建、删除、遍历
IO流
- 概念:Input 输入,读入,Output 输出,写入
- IO主体:内存
- 数据源 : 提供数据的文件
- 数据端: 接收数据的文件
- 工具:流
- 字节流:继承自 InputStream / OutputStream 这两个抽象类。 FileInputStream / FileOutputStream ObjectInputStream / ObjectOutputStream
- 字符流:继承自 Reader / Writer 这两个抽象类。 FileReader / FileWriter
- 缓冲流:缓冲流是一种装饰器类,目的是让原字节流、字符流新增缓冲的功能。 BufferedInputStream & BufferedOutputStream BufferedReader & BufferedWriter
- 数据流:允许字节流直接操作基本数据类型和字符串。 DataOutputStream & DataInputStream
- Serializable && Externalizable
- 接口主要用于对象的序列化和反序列化。序列化是将对象的状态转换为字节流,以便可以保存到文件中或通过网络传输,而反序列化则是将字节流恢复为对象。
- 实现 接口非常简单,只需让类实现这个接口即可
- 用于存储到本地磁盘或网络传输的对象必须实现序列化接口Serializable,如果对象中的某些属性不想被序列化,将该属性用transient(临时的)修饰即可。另外,static成员也不会被序列化。
- 持久化
- 数据从内存转存到可掉电设备
为什么要实现 接口?
- 持久化:
- 使对象能够被存储到文件、数据库或其他存储介质中,以便在后续使用时恢复。
- 网络传输:
- 在分布式系统中,通过网络发送对象时,需要将其序列化为字节流,接收方再进行反序列化。
- 深度复制:
- 可以通过序列化和反序列化来实现对象的深度复制,即创建一个对象的完全独立副本。
- 简化代码:
- Java 提供了内置的序列化机制,使用 接口可以避免手动编写复杂的序列化逻辑。
XML
- XML: eXtensible Markup Language ,可扩展标记语言
- 应用范围:
- 数据存储
- 系统配置
- 数据交换
XML文档结构
- 文档声明
- DTD 约束 (可选)
- 文档正文
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE team SYSTEM "team.dtd"> <team> <coach> <name>张三</name> <sex>男</sex> </coach> <players> <player id="1"> <name>李四</name> <age>25</age> <height>178</height> <weight>68</weight> </player> <player id="2"> <name>王五</name> <height>185</height> <weight>70</weight> </player> </players> </team>
- XML元素命名规则
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
- 标签名大小写敏感
DTD: Document Type Definition
- 作用:规范元素、属性以及元素间的关系
- 量词:
: 被修饰的元素可以出现0次或1次 : 被修饰的元素至少要出现1次 : 被修饰的元素可以出现任意次
<!ELEMENT team (coach,players)> <!ELEMENT coach (name,sex)> <!ELEMENT players (player+)> <!ELEMENT player (name,age?,height,weight)> <!ATTLIST player id CDATA #REQUIRED > //#REQUIRED:必须的,#IMPLIED:非必须的 <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ELEMENT height (#PCDATA)> <!ELEMENT weight (#PCDATA)>
XML解析
- DOM: 把整个xml文件读入内存进行解析
- SAX:一次读一部分,分段解析
反射
- 概念:java程序在运行时加载、使用编译期完全未知的类信息。
- Class: class:类型修饰符 Class:是一个数据类型
- 对比:
Class:描述所有的类(数据类型) 共性:成员变量、构造器、成员方法
Student:描述所有的学生 。共性:学号、姓名、学习
Java 的反射机制是 Java 语言的一项强大特性,允许程序在运行时动态地获取类的信息,包括类的属性、方法和构造函数等,并能够操作它们。反射机制可以用于许多场景,例如框架开发、动态代理、序列化与反序列化等。
反射的基本概念
- Class 类:Java 中每个对象都是由一个 对象来描述的。可以通过 、实例的 方法或者使用 来获取类的 对象。
- 获取信息:反射提供了多种方法来获取类的信息,包括:
- 获取类的名称
- 获取类的字段
- 获取类的方法
- 获取类的构造函数
- 访问成员:通过反射,可以动态调用方法、访问和修改字段的值。
反射的优缺点
优点
- 灵活性:可以在运行时动态加载和操作类,增强了程序的灵活性和扩展性。
- 框架支持:许多 Java 框架(如 Spring、Hibernate)利用反射机制来提供 DI(依赖注入)、AOP(面向切面编程)等功能。
缺点
- 性能开销:反射机制通常比直接调用慢,因为它涉及到动态查找和类型检查。
- 安全性:通过反射可以访问和修改私有成员,可能会破坏封装性,增加安全隐患。
- 复杂性:反射代码相对较难理解和维护。
注解
- 注释:说明
- 注解:功能
- Java 注解(Annotations)是 Java 5 引入的一种元数据机制,允许开发者在代码中添加额外的信息,这些信息可以在编译时、类加载时或者运行时被读取和处理。注解通常用于提供编译器指令、配置框架行为、生成文档等。
语法
@interface()
内置注解
- @Override 重写
- @SusspressWarnings 抑制警告
- @FunctionalInterface 函数式接口(只有一个抽象方法的接口)
自定义注解
public @interface SqlProvider { String value() default "delete from tableName"; String sql() default ""; }
四大元注解
- 元数据:说明数据的数据
- 元注解:说明注解的注解
- 四大元注解
- @Target
- @Retention
- @Documented
- @Inherited
注解的用途
编译时检查:提供额外信息供编译器使用,以进行检查。
运行时处理:框架(如 Spring 和 Hibernate)利用反射处理注解,以增加灵活性和功能。
生成文档:javadoc 可以提取注解信息生成文档。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/2749.html