10第十讲Java 高级IO流
- 格式:ppt
- 大小:728.50 KB
- 文档页数:17
io流面试题在Java开发中,IO流是一个常见而重要的概念。
在面试中,经常会被问到与IO流相关的问题。
了解和掌握IO流的概念、原理和常见的使用方式,对于成功通过面试至关重要。
本文将介绍一些常见的IO流面试题及其答案,帮助读者更好地准备面试。
1. 什么是IO流?IO流是指输入输出流,用于处理设备之间的数据传输。
在Java中,IO流可以用于读取文件内容、读取网络数据、向文件写入数据等。
2. Java中的IO流有哪些分类?Java中的IO流可以分为字节流和字符流。
- 字节流:以字节为单位进行数据的输入和输出,包括InputStream和OutputStream。
- 字符流:以字符为单位进行数据的输入和输出,包括Reader和Writer。
3. InputStream和OutputStream的主要作用是什么?InputStream是一个抽象类,用于读取字节流。
OutputStream也是一个抽象类,用于写入字节流。
它们是Java中所有输入流和输出流的基类,是IO操作的基础。
4. Reader和Writer的主要作用是什么?Reader是一个抽象类,用于读取字符流。
Writer也是一个抽象类,用于写入字符流。
它们可以处理Unicode字符,并且提供了专门用于字符处理的方法。
在读取或写入文本文件等操作中,常常使用字符流。
5. Java的IO流如何进行数据的读取和写入?Java的IO流提供了丰富的类和方法来进行数据的读取和写入。
对于输入流,通常可通过创建相关的InputStream或Reader对象,并使用read()或readLine()等方法来读取数据。
对于输出流,通常可通过创建相关的OutputStream或Writer对象,并使用write()等方法来写入数据。
6. 请解释一下Java中的File类的作用。
File类用于表示文件或目录的路径。
可以通过File类来操作文件或目录,比如创建文件、删除文件、判断文件/目录是否存在等。
JavaIO流详解(三)----字节流InputStream和OutPutStream我们都知道在计算机中,⽆论是⽂本、图⽚、⾳频还是视频,所有的⽂件都是以⼆进制(字节)形式存在的,IO流中针对字节的输⼊输出提供了⼀系列的流,统称为字节流。
字节流是程序中最常⽤的流。
在JDK中,提供了两个抽象类InputStream和OutputStream,它们是字节流的顶级⽗类,所有的字节输⼊流都继承⾃InputStream,所有的字节输出流都继承⾃OutputStream。
既然⼆者是抽象类,那么就不能实例化,都是依赖于具体继承它们的⼦类去实现。
但⼆者抽象类中也包含它们各⾃的⽅法,如果我们先了解清楚抽象类中每⼀个⽅法的含义,那么对于后续具体的⼦类将会有⾮常⼤的帮助。
1、字节输⼊流InputStreamInputStream是所有字节输⼊流的⽗类,定义了所有字节输⼊流都具有的共同特征。
其内部提供的⽅法如下:image上图中的三个read()⽅法都是⽤来读数据的。
int read():每次读取⼀个字节,返回读取到的字节。
int read(byte[] b):每次读取b 数组长度的字节数,然后返回读取的字节的个数[注意与read() ⽅法的区别],读到末尾时返回-1。
int read(byte[] b,int off,int len):每次读取b 数组长度的字节数,从数组b 的索引为off 的位置开始,长度为len个字节。
⼩贴⼠:close⽅法,当完成流的操作时,必须调⽤此⽅法,释放系统资源。
其中InputStream的实现类FileInputStream是专门⽤于读取⽂件中的数据,通过它将⽬标设备上的数据读⼊到程序。
FileInputStream的构造⽅法:FileInputStream(File file):通过打开与实际⽂件的连接来创建⼀个FileInputStream ,该⽂件由⽂件系统中的File对象file命名。
Java I/O总结∙从new BufferedReader(new InputStreamReader(conn.getInputStream()))想到的∙Java I/O总结——OutputStream∙Java I/O总结——Reader∙Java I/O总结——Writer∙Java I/O总结——补充说明从new BufferedReader(new InputStreamReader(conn.getInputStream()))想到的从new BufferedReader(new InputStreamReader(conn.getInputStream()))想到的?晚上睡在床上,这一小段代码在我的脑海里不断浮现,因为它 看上去有些相似(在设计模式中的看到过类似),但是实在想不起与那个模式相似了?翻开设计模式书,已经好久没有看到过本书了,说实话对这本书中的大多数还不是很了解,但是此刻看到能让我想到了,说明这个模式给我留下了深刻的影 响。
翻开书找了半天,我一直以为是Strategy,后来看了下不是的,从头看到尾,终于找到了Decorator(装饰)。
把这个设计模式又仔细读了一 遍,在这里与大家分享。
设计意图动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式相比较生产子类更为灵活。
设计动机有时候我们希望给某个对象增加而不是整个类增加一些功能,例如,给一个图像界面工具箱允许你对人员一个用户界面的组件添加一些特性,比如说边框,或者窗口滚动。
使用继承机制是添加功能的一种有效途径,从其他类继承过来的边框特性可以被多个子类的实例所实现。
但是这种方法不够灵活,因为边框的选择是静态的,用户不能控制对组件加边框的方式和时机。
一种较为灵活的方式是将组件嵌入另外一个对象中,由这个对象添加边框,我们称这个嵌入的对象为装饰。
结构代码部分我们就不详细说明,如下图所示:这张图当时好象是我学习设计模式中,看的最清楚的一张(难得啊,设计模式中的那么多图,很多当时看的时候都不是很明白),当然这张图不是我最在意的。
05.IO流、异常处理基本IO操作RAF 提供了文件随机读写功能,但是没有提供复杂数据的读写功能。
Java 提供了另外一套可以灵活扩展的API: IO流。
IO流在节点流基础之上提供了丰富的的扩展功能,利用这些扩展流可以大大简化IO程序的开发。
1. InputStream与OutputStream1.1. 输入与输出流按照数据流向分为输入流和输入流:什么是输入:输入是一个从外界进入到程序的方向,通常我们需要“读取”外界的数据时,使用输入。
所以输入是用来读取数据的。
InputStream 代表输入流经常缩写为in/包含核心方法read()/关闭方法 close()什么是输出:输出是一个从程序发送到外界的方向,通常我们需要”写出”数据到外界时,使用输出。
所以输出是用来写出数据的。
OutputStream 代表输出流经常缩写为out/包含核心方法write()/关闭方法close() 这两个流是抽象类,不能直接使用。
在实际工作中使用其实现类:文件输出流FileOutputStream1.2. 节点流与处理流按照流是否直接与特定的地方(如磁盘、内存、设备等) 相连,分为节点流和处理流两类。
节点流:可以从或向一个特定的地方(节点)读写数据。
//节点流是流最原始的数据源,提供流最基本的功能。
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。
//也称为高级流,过滤流,处理流是在其他流的基础之上扩展出更高级的功能。
处理流的核心特点是必须依赖于另外一个流,自己不能独立功能,处理流是对另外的流进行扩展。
处理流的构造方法总是要带一个其他的流对象做参数。
一个流对象经过其他流的多次包装,称为流的链接。
2. 文件流2.1. 创建FOS对象(重写模式)FileOutputStream是文件的字节输出流,我们使用该流可以以字节为单位将数据写入文件。
构造方法:FileOutputStream(File file)创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
java高级复习计划一、Java中的多线程编程1. 线程的基本概念与创建2. 线程的生命周期与状态转换3. 线程同步与互斥4. 线程通信与等待/通知机制5. 线程池的使用与原理6. 线程安全与线程不安全的区别二、Java中的IO与NIO编程1. IO流的分类与基本操作2. 字节流与字符流的转换操作3. 文件IO与目录操作4. 序列化与反序列化5. NIO的基本概念与特点6. NIO的非阻塞IO与选择器的使用三、Java中的数据结构与算法1. 数组与链表的基本操作2. 栈与队列的实现与应用3. 排序算法的原理与实现(冒泡排序、插入排序、选择排序、快速排序、归并排序)4. 查找算法的原理与实现(二分查找、哈希查找、线性查找)5. 树的基本概念与遍历方式6. 图的基本概念与遍历方式四、Java中的数据库编程1. JDBC的基本概念与使用2. 数据库连接池的使用与原理3. SQL语句的编写与优化4. 事务的基本概念与使用5. ORM框架(如MyBatis、Hibernate)的基本使用与原理五、Java中的设计模式1. 创建型模式(单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式)2. 结构型模式(适配器模式、装饰器模式、代理模式、组合模式、外观模式、桥接模式、享元模式)3. 行为型模式(观察者模式、模板方法模式、策略模式、命令模式、迭代器模式、状态模式、备忘录模式、访问者模式、中介者模式、解释器模式)六、Java中的网络编程1. TCP与UDP协议的基本概念与区别2. Socket编程的基本过程与实现3. HTTP协议的基本概念与应用4. RESTful API的设计与实现5. Socket编程中的多线程与多客户端处理七、Java中的异常处理1. 异常的分类与处理机制2. 异常的捕获与抛出3. 自定义异常与异常链4. 异常处理的最佳实践八、Java中的反射与注解1. 反射的基本概念与应用场景2. 获取Class对象与创建实例3. 动态调用方法与访问属性4. 注解的基本概念与使用5. 编写自定义注解与处理器九、Java中的性能调优与内存管理1. JVM的基本架构与工作原理2. JVM参数设置与调优3. 垃圾回收算法与机制4. 内存泄漏与内存溢出的原因与处理5. 线程安全与性能调优的关系十、Java中的并发与并行编程1. 并发与并行的基本概念与区别2. synchronized关键字与volatile关键字的使用3. 并发集合类(如ConcurrentHashMap、ConcurrentLinkedQueue)的使用与原理4. 并发编程的最佳实践与常见问题解决以上内容为Java高级复习计划,希望对你有所帮助。
Java⾃学第10期——File类与IO流(输⼊输出流、处理流、转换流、缓冲流、Prope。
1、IO简介IO(输⼊输出)通过java.io包下的类和接⼝来⽀持,包下包括输⼊、输出两种IO流,每种输⼊输出流⼜可分为字符流和字节流两⼤类。
2、File类File类是io包下与平台⽆关的⽂件和⽬录,File能新建、删除、重命名⽂件和⽬录,不能访问⽂件本⾝,后者需要使⽤输⼊输⼊流。
2.1 构造⽅法File类的构造⽅法:File(File parent, String child) 参数:⽗路径,⼦路径根据 parent 抽象路径名和 child 路径名字符串创建⼀个新 File 实例。
File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建⼀个新 File 实例。
File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建⼀个新 File 实例。
File(URI uri)通过将给定的 file: URI 转换为⼀个抽象路径名来创建⼀个新的 File 实例。
2.2 静态⽅法File类静态⽅法:static String pathSeparator()与系统有关的路径分隔符,为了⽅便,它被表⽰为⼀个字符串。
static char pathSeparatorChar()与系统有关的路径分隔符。
static String separator()与系统有关的默认名称分隔符,为了⽅便,它被表⽰为⼀个字符串。
static char separatorChar()与系统有关的默认名称分隔符。
2.3 常⽤⽅法:2.3.1 获取相关public String getAbsolutePath()返回此File的绝对路径名字符串。
public String getPath()将此File转换为路径名字符串。
public String getName()返回由此File表⽰的⽂件或⽬录的名称。
Java流操作有关的类或接口:Java流类图结构:流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。
即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
IO流的分类∙根据处理数据类型的不同分为:字符流和字节流∙根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由来:因为数据编码的不同,而有了对字符进行高效操作的流对象。
本质其实就是基于字节流读取时,去查了指定的码表。
字节流和字符流的区别:∙读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
∙处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
结论:只要是处理纯文本数据,就优先考虑使用字符流。
除此之外都使用字节流。
输入流和输出流对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。
Java IO流对象1.输入字节流InputStream IO 中输入字节流的继承图可见上图,可以看出:1.InputStream 是所有的输入字节流的父类,它是一个抽象类。
2.ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。
PipedInputStream是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。
3.ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。
2.输出字节流OutputStreamIO 中输出字节流的继承图可见上图,可以看出:1.OutputStream 是所有的输出字节流的父类,它是一个抽象类。
java知识点难点总结Java作为一门流行的编程语言,有着广泛的应用领域和大量的开发者群体。
但是,对于初学者和甚至一些有经验的程序员来说,Java也存在着一些难点和陷阱。
本文将总结一些Java中的难点知识点,帮助读者更好地理解和掌握这门语言。
1. 异常处理Java中的异常处理是一个比较困扰程序员的难点。
在Java中,异常是一种程序运行时遇到的问题,如空指针异常、类找不到异常等。
在实际开发中,异常处理是必不可少的。
Java提供了try-catch-finally语句来处理异常,但是在实际项目中,异常可能会导致复杂的处理逻辑,需要程序员有着一定的经验和技巧来处理。
此外,Java也提供了throws和throw关键字来抛出异常和主动抛出异常,这也是初学者比较容易混淆的地方。
2. 多线程多线程是Java的一大特色,也是一大难点。
在Java中,可以通过继承Thread类或者实现Runnable接口来创建线程,但是线程的并发访问可能导致数据同步问题,需要使用synchronized关键字来解决。
而且在Java中,线程的调度、同步、死锁等问题也常常让程序员头疼。
3. 内存管理Java有自己的内存管理机制,但是并不是所有的程序员都能完全理解和掌握。
尤其是对于垃圾回收机制的工作原理和触发条件,大部分程序员只知道有垃圾回收,但是并不了解具体的内部实现。
了解垃圾回收机制对于程序员来说是非常重要的,可以避免内存泄漏和性能问题。
4. 集合框架Java提供了丰富的集合框架,如List、Set、Map等。
对于初学者来说,可能会感到困惑的是各种集合的使用场景和区别,以及集合框架的实现原理。
比如ArrayList和LinkedList的区别,或者HashMap和TreeMap的选择等。
5. 泛型泛型是Java中比较抽象和难理解的概念之一。
在Java中,泛型是一种参数化类型的概念,可以使得代码更加通用和安全。
但是对于一些初学者来说,可能会感到困惑的是泛型的通配符、类型擦除等问题。