住房和城乡建设部贰级建造师网站,asp网站开发招聘,网站建设谈单情景对话,广州网站商城建设作者的话 前言#xff1a;这些都是很基本的#xff0c;还有很多没有写出来#xff0c;重点在于考试复习#xff0c;包括后四章的内容 前面内容请参考JAVA阶段考内容知识点的梳理 一、集合、流
课堂总结1集合 集合概念#xff1a; 保存和盛装数据的容器#xff0c;将许多…作者的话 前言这些都是很基本的还有很多没有写出来重点在于考试复习包括后四章的内容 前面内容请参考JAVA阶段考内容知识点的梳理 一、集合、流
课堂总结1集合 集合概念 保存和盛装数据的容器将许多元素组合成一个单一单元的容器对象。集合框架 表示和操作集合的体系包括接口、实现类集合框架的结构图。 接口Iterable、Iterator、Collection、List、Queue、Set、Map;类ArrayList,LinkedList,HashSet,TreeSet,HashMap,TreeMap,Stack; 具体实现 java.lang.Iterable接口实现了此接口类的对象支持使用Iterable遍历元素及支持For Each循环语句boolean add()向集合添加元素。如调用更改了集合返回true下同 next()//向后移动游标同时返回游标指向的元素remove()//移除当前游标未知的元素java.util.Collection接口用于描述最具用通用性的集合包含了最具有通用性的集合操作和方法 boolean add()向集合添加元素。如调用更改了集合返回true下同boolean addAll()向集合添加一个集合boolean remove()从集合移除中指定元素boolean removeAll()从集合移除包含指定集合void clear()移除集合全部元素boolean contains()判断集合是否包含指定元素boolean containsAll()判断是否包含包含指定集合boolean isEmpty()判断集合是否包含元素int size() 集合长度T[] toArray(将集合转为指定类型的数组IteratorE iterator()获取迭代器;java.util.List集合:有序的允许包含重复的元素集合。除了从Collection继承的方法外提供基于位置索引的操作方法 add()将指定位置元素后移添加set()替换get(int index)获取remove(int index)移除List集合接口基本实现类即不同数据结构的实现 java.util.ArrayList基于对象数组数据结构的实现用的最多整体性能好java.util.LinkedList基于双向链表数据结构的实现List与数组的转换 List to Array 用toArray()方法 Array to List:Arrays工具类提供asList(T… a)方法 asList()方法为适配器模式方法仅转换了类型底层仍是数组。因此执行任何修改集合长度方法(add/remove等)将抛出异常 java.util.Map接口用于存放键值对key-value通过Key值获取相应的value值 Map中key必须是唯一的且每个key只能对应一个value但不同key可以对应同一个value添加key-value时如果key已经存在则后一个覆盖前一个。支持以任何类型引用类型对象为key/value基本实现类 java.util.HashMap查询效率与内存占用最平衡非线程安全java.util.TreeMap;java.util.Table常用操作方法 put( key, value)保存键值对get( key)基于key获取对应的value如果value不存在返回null getOrDefault(key, VValue)获取对应的value没有则使用默认值remove( key) ,去除对应的value值containsKey(Object key)键是否存在containsValue(Object value)值是否存在size() 长度 isEmpty() 是否为空 如何判断key相同?重写hashCode()和equals()方法 String重写了hashCode()/equals()方法因此直接基于字符串值而非对象的hash值比较好像大致意思是判断key相等是用key的直接基于key的字符串值判断 Set集合不包含重复元素(数学中集合的抽象)扑克牌不重复的关系人事物等 是否重复根据hashCode()/equals() Set接口只包含继承自Collection方法并添加禁止重复元素的限制无基于索引的操作方法 基本实现类 java.util.HashSet元素无序(底层基于HashMap确定元素是否重复) java.util.LinkedHashSet元素有序 java.util.TreeSet 元素有序 不可变集合就是不可被修改的集合定义完成后不可以修改或者添加、删除。集合的数据项在创建的时候提供并且在整个生命周期中都不可改变。 在Java 9中可以使用静态工厂方法List.of、Set.of与Map.of来创建不可变列表、集合或映射 注意 课堂总结2流
函数式编程是一种程序设计思想 Stream操作的是集合中的元素而非集合本身。因此将创建新集合聚合Stream操作的结果而不影响源集合结构使用Stream的基本步骤包括 创建Stream通过stream()方法取得集合对象的数据集。Intermediate通过一系列中间Intermediate方法对数据集进行过滤、检索等数据集的再次处理。例如使用filter()方法来对数据集进行过滤。Terminal通过最终terminal方法完成对数据集中元素的处理。例如使用forEach()完成对过滤后元素的打印中间操作 filter过滤掉不和要求的元素、把表达式结果为真的元素放入新流中 map把流中元素的类型映射为新类型如只要元素的某个属性 sortedComparator.**对流中元素排序。 Comparator.comparing()基于指定值排序、 reversed()倒序 终止操作 collectCollectors.** Collectors的groupingBy()按指定类型分组返回Map、toList()、toSet()、toMap()转化为映射关系给出key和value forEach() jdk8以后map也有forEach方法map提供的不是继承的 forEach((k, v) - { System.out.println(k / v.getColor()); }); 元素删除Collection的removeIf方法基于Iterator实现。 课堂总结3Optional容器 引入原因解决空指针异常。Optional单值容器、提供很多有用的方法使用时不用显式进行空值检测获得Optional对象 ofNullable元素不必为空of元素必不为空//用的少常见方法 ifPresent(Consumer consumer)不空执行参数操作空什么也不做中间操作filter过滤、map映射为新类型的容器。都可以返回空容器orjdk9的方法为空时执行参数函数且必须返回相同类型的容器终止操作orElse得到元素类型为空时返回参数创建对象 orEsleGet空时执行函数返回元素对象 get、得到容器对象空抛异常不建议用用orElseisPresent判断是否为空 相关习题
1.Java集合框架的顶级接口是C
A. IterableB. IteratorC. CollectionD. List Collection接口是Java集合框架的根接口它定义了一组对象的基本操作如添加、删除、清空、遍历等。Iterable接口是一个功能接口它只有一个抽象方法iterator() 2.正确声明一个整型集合变量B
A. Listint list;B. ListInteger list;C. List listint;D. List listT;
3.若类A继承自类B变量ListA list1集合中允许添加类B对象
A. 对B. 错 因为ListA是List的子类而ListB也是List的子类但是ListA和ListB之间并没有任何关系。所以变量ListA list1集合中只能添加A类型的对象而不能添加B类型的对象 补充题
类B继承自类A集合ListA当向集合添加B类型对象时( )
A. 编译时错误B. 运行时错误C. 警告D. 无错误 父类无法添加子类能添加 4.LinkedList是继承自Collection接口的一种基于链表的集合类型
A. 对B. 错 答案解析 LinkedList不是集合类型而是List集合类型的一种基于双向链表的实现 5.Map是一种用于存放键值对的集合类型
A. 对B. 错 Map不是集合 6.欲构造ArrayList类的一个实例下列哪个语句是正确的B
A. ArrayList myListnew Object ();B. List myListnew ArrayList ();C. ArrayList myListnew List ();D. List myListnew List ();
7.集合Stream是一种操作集合的容器
A. 对B. 错
8. (判断题)集合Stream可通过过滤操作移除源集合中的元素
A. 对B. 错 stream的操作会产生新集合,不会影响源集合结构 9.Optional是一种集合类型可以向里面添加多个同类型的对象。
A. 对B. 错 Optional并不是一种集合类型而是一种用于表示一个可能存在的值或者不存在的值的包装类型。它通常用于处理可能为空的情况而不是用于存储多个对象。Optional类型要么包含一个非空的值要么为空。如果要表示多个同类型的对象通常会使用List、Set或者其他集合类型。 10.Optional的map()方法,允许改变容器中元素类型
A. 对B. 错 Optional类提供了map()方法它允许对Optional对象中的值进行转换并返回一个包含转换结果的新的Optional对象。map()方法的作用是对Optional对象进行转换操作可以改变容器中元素的类型。这在处理Optional对象时非常有用可以将一个类型的Optional对象转换为另一个类型的Optional对象。 二、异常
课堂总结 异常的分类 Throwable 是所有异常的祖先Throwable有两个子类Error和Exception;Error是错误表示运行应用程序中出现了严重错误都是通过Error抛出的一般程序无法处理Exception是异常表示程序运行的时候程序本身可以捕获并可以处理的错误常用异常 异常处理的关键字 捕获异常 try:执行可能产生异常的代码catch捕获异常finally:无论是否发生异常代码总被执行抛出异常 throw:异常生成阶段手动抛出异常对象声明异常 throws声明方法可能要抛出的各种异常类 定义新的异常 Throwable类中的常用方法 相关习题
1.基于以下代码分析方法未引发异常的输出结果
private static void try() {try {System.out.println(A);method(); // 未引发异常System.out.println(B);return;System.out.println(C);} catch (Exception e) {System.out.println(D);} finally {System.out.println(E);}System.out.println(F);return;}
A. A BB. A B EC. A B E FD. A E B
2.基于以下代码分析方法引发异常的输出结果
private static void try() {try {System.out.println(A);method(); // 引发异常System.out.println(B);return;System.out.println(C);} catch (Exception e) {System.out.println(D);} finally {System.out.println(E);}System.out.println(F);return;}
A. A D E BB. A D B E FC. A D E FD. A D E B C
3.仅支持自定义Unchecked类型异常不支持自定义checked类型异常
A. 对B. 错 Java中支持自定义checked类型异常和unchecked类型异常。checked异常是指在程序编译时必须处理的异常而unchecked异常是指在程序运行时才会出现的异常。Java中的RuntimeException及其子类都是unchecked异常其他的Exception及其子类都是checked异常 4.自定义异常类时可以继承的类是
A. ErrorB. AppletC. Throwable、Exception及其子类D. AssertionError
5.对于catch子句中异常的排列下列哪种是正确的( )
A. 父类异常在先子类异常在后B. 子类异常在先父类异常在后C. 有继承关系的异常不能在同一个try程序段内D. 异常怎么排列都可以和次序无关 这是因为如果父类异常在先那么后面的子类异常就不会被捕获因为父类异常已经包含了子类异常。而且通常子类异常的信息比父类异常更精确。所以为了正确处理不同类型的异常应该按照从小到大的范围排列catch子句 6.父类中未声明抛出异常的方法子类重写时允许增加抛出checked类型异常声明
A. 对B. 错 子类重写父类的方法时对于checked异常子类不能增加抛出异常的声明。子类只能抛出父类方法中声明的异常或者其子类型的异常或者完全不抛出异常。这是为了保证子类的使用不会比父类更容易出错遵循了Liskov替换原则。 如果父类的方法没有声明抛出任何checked异常子类在重写该方法时也不能声明抛出任何checked异常。如果子类的方法抛出了checked异常编译器会报错。只有unchecked异常可以在子类方法中抛出而不受限制。 7.出现异常时java会沿方法调用栈寻找最近一个专门捕获处理与此异常类型相同的程序而非能处理此异常类型的程序
A. 对B. 错 在Java中当异常出现时Java虚拟机会沿着方法调用栈向上寻找能够处理该异常的程序直到找到合适的异常处理器。这个处理器可以是专门捕获并处理该异常类型的程序也可以是能够处理该异常类型或其父类型的通用异常处理器。 Java异常处理机制允许使用try-catch语句来捕获和处理异常。当异常发生时程序会跳转到能够处理该异常的catch块而不是继续向上查找最近一个专门捕获处理该异常类型的程序。因此异常处理器不一定是专门为某个异常类型而设计的而是能够处理该异常类型或其父类型的异常处理器。 所以给定的陈述是错误的。正确的表述应该是当异常出现时Java会沿方法调用栈向上寻找能够处理该异常类型或其父类型的异常处理器。 8.可以不在出现异常的方法内捕获处理异常
A. 对B. 错 在Java中可以在异常发生的方法外部捕获和处理异常。Java异常处理机制允许使用try-catch语句块来捕获异常并在合适的地方进行处理。这意味着可以在调用异常可能发生的方法的地方使用try-catch语句来捕获和处理异常而不一定需要在异常发生的方法内部处理异常。 9.方法声明抛出异常会影响方法签名
A. 对B. 错
10.构造函数上禁止抛出异常
A. 对B. 错 在Java中构造函数可以抛出异常。与其他方法一样构造函数可以在其声明中包含抛出异常的声明。 构造函数可以抛出受检异常checked exceptions和未受检异常unchecked exceptions。受检异常是在方法声明中显式声明的异常调用者必须处理或继续抛出。未受检异常是RuntimeException或其子类的异常调用者可以选择性地处理或继续抛出。 当构造函数抛出受检异常时调用者在创建对象实例时必须处理这些异常可以通过try-catch块捕获异常或继续向上层抛出异常。 11.抽象方法无法声明抛出异常
A. 对B. 错 抽象方法是一种没有具体实现的方法它只是在抽象类或接口中进行声明。在Java中抽象方法可以声明抛出异常就像普通方法一样。声明抛出异常的目的是让调用者知道该方法可能会产生特定类型的异常并采取相应的处理措施。 12.与外部资源互交时可能出现Unchecked类型异常
A. 对B. 错 与外部资源互动时可能出现检查型异常而不是非检查型异常Unchecked Exception。非检查型异常如RuntimeException及其子类通常表示程序错误或编程错误而检查型异常如IOException、SQLException等通常表示外部资源操作的失败或异常情况。 三、线程
课堂总结 程序、进程、线程 程序是指含有指令和数据的文件被存储在磁盘或其他的数据设备中也就是说程序是静态的代码进程是程序的一次执行过程是代码在数据集合上的一次运行活动是系统资源分配和调度的基本单位线程线程是进程中的一个实体是被系统独立调度和分派的基本单位一个进程中至少有一个线程进程中的多个线程共享进程的资源 简而言之一个程序至少有一个进程一个进程至少有一个线程 线程的创建 继承Thread类创建线程 实现Runnable接口创建线程 执行顺序 Thread类的常用方法 start(): 启动一个新线程并执行 run() 方法中的代码。run(): 定义线程要执行的代码。sleep(long millis): 使当前线程暂停执行指定的时间。join(): 等待该线程终止。interrupt(): 中断该线程。 notify()和notifyAll()的作用则是唤醒当前对象上的等待线程notify()是唤醒单个线程而notifyAll()是唤醒所有的线程。 wait()的作用是让当前线程进入等待状态同时wait()也会让当前线程释放它所持有的锁。直到其他线程调用此对象的 线程的同步 volatile关键字 简单保证数据的可见性。就是一个线程在对主内存的某一份数据进行更改时改完之后会立刻刷新到主内存。并且会强制让缓存了该变量的线程中的数据清空必须从主内存重新读取最新数据。 Volatile可以保证变量的可见性但无法保证并发执行操作的原子性 synchronized 关键字 它用于修饰方法或代码块。当一个方法或代码块被声明为 synchronized 时它表示这个方法或代码块是同步的只能被一个线程同时访问。 synchronized 关键字可以保证线程安全防止多个线程同时访问和修改共享数据。当一个线程进入 synchronized 方法或代码块时它会获得一个锁当这个线程离开 synchronized 方法或代码块时它会释放这个锁。只有获得锁的线程才能进入 synchronized 方法或代码块 构造函数不能同步在构造函数中使用synchronized关键字是语法错误 synchronized无法修饰抽象方法 相关习题
1.CountDownLatch类中要求执行线程阻塞直到计数器为零的方法是
A. trace()B. await()C. sleep()D. submit() CountDownLatch是Java中的一个同步辅助类它可以用于控制一个或多个线程等待其他线程的操作完成。它通过一个计数器来实现该计数器初始化为一个正整数并且在计数器未达到零之前调用线程将被阻塞。 await()方法是CountDownLatch类中用于阻塞线程的方法。当调用await()方法时当前线程会被阻塞直到计数器的值变为零。当其他线程调用CountDownLatch的countDown()方法计数器的值会减一直到计数器的值为零时被阻塞的线程才会被唤醒继续执行。 2.关于关键词volatile下列叙述正确的是
A. 可以保证对修饰变量操作是同步的B. 修饰方法实现原子性操作C. 线程不保存变量副本每次使用都去主内存读取D. 仅支持修饰基本数据类型 关键字volatile在Java中用于修饰变量具有以下特性 A. 可以保证对修饰变量的操作是可见的即当一个线程修改了volatile修饰的变量的值时其他线程能够立即看到最新的值。但它并不能保证操作的原子性因此不适用于保证对变量操作的同步性。 B. 修饰方法并不能实现原子性操作。volatile关键字主要用于修饰变量而不是方法。 C. 线程不会保存volatile修饰变量的副本每次使用变量时都会去主内存中读取最新的值。这是volatile的一个重要特性可以确保线程获取到的是最新的值。 D. volatile关键字不仅支持修饰基本数据类型也支持修饰引用类型变量。因此选项D是不正确的。 4.发出中断通知会使线程停止运行
A. 对B. 错 发出中断通知不会直接使线程停止运行。在Java中可以使用Thread类的interrupt()方法发出中断通知但这只是一种通知机制它会设置线程的中断状态而不会直接停止线程的执行。 5.线程默认会反复循环执行任务直到被强制中断
A. 对B. 错 线程默认情况下不会反复循环执行任务直到被强制中断。线程的执行取决于线程所执行的任务和线程的逻辑。 在Java中线程可以执行一次性任务也可以执行循环任务具体取决于线程的实现代码。线程可以在任务完成后自行结束也可以在满足某个条件或收到中断通知时结束。 6.类中有2个要求执行同步的实例级方法当1个线程调用其中一个同步方法时其他线程无法调用另一同步方法
A. 对B. 错
7.类中有1个要求执行同步的实例级方法1个普通方法。
当1个线程调用其中一个同步方法时其他线程无法调用非同步方法
A. 对B. 错
8.下面程序的运行结果
public static void main(String[] args) {Thread t new Thread() {public void run() {pong();}};t.run();System.out.print(ping);}static void pong() {System.out.print(pong);}
A. pingpongB. pongpingC. pingpong和pongping都有可能D. 都不对
9.以下可以实现多线程下原子性执行操作的接口是( )
A. LockB. RandomC. AtomicD. Executor
10.Thread类的sleep()方法和wait()方法都可以让线程暂停执行。 A. 对B. 错 Thread类的sleep()方法和wait()方法都可以让线程暂停执行但它们的使用方式和效果有所不同。 sleep()方法是Thread类的静态方法调用它会让当前线程暂停执行一段指定的时间。sleep()方法不会释放锁并且线程在休眠期间不会被中断直到休眠时间结束才会继续执行。 wait()方法是Object类的实例方法调用它会让当前线程暂停执行并释放对象上的锁。wait()方法通常与synchronized关键字一起使用以实现线程之间的协调和同步。当线程调用wait()方法时它会进入等待状态直到其他线程调用相同对象的notify()或notifyAll()方法来唤醒等待的线程。 四、IO操作
课堂总结 IO流的概念 IO流将不同的输入输出以相同的方式操作read(),write();创建不同类型的流有不同的实现方式不同类型的流又有各自特有的操作方式。无论内部如何工作所有IO流呈现的都是相同的简单的模式程序中流入或流出的一系列数据。 Inputstream、Outputstream: 输入流输出流的操作超类支持子类以基本字节的方式操作二进制数据java.io.InputStream抽象类基本子类ByteArrayInputStream,FileInputStream等 int read() throws IOException,抽象方法由具体子类实现返回流中下一字节必然是0-255之间的整数表示如果到达流末没有可读字节返回-1.java.io.OutputStream抽象类基本子类ByteArrayOutputStream,FileOutputStream等void write(int b) throws IOException 抽象方法。将十进制按字节写入输出流。 import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Paths;public class TestIO {public static void main(String[] args) {try {getByteStreams();} catch (IOException e) {e.printStackTrace();}}public static void getByteStreams()throws IOException {FileInputStream innew FileInputStream(C:/Users/yu/Desktop/a.txt);FileOutputStream outnew FileOutputStream(C:/Users/yu/Desktop/b.txt);int c;while((cin.read())!-1){System.out.println(读取字节的10进制整数c);out.write(c);}in.close();//有个问题就在于一旦异常了资源就无法关闭out.close();}} 资源文件的关闭资源文件比如IO流不会像其他对象因失去引用而自动释放占用的资源因此必须被正确的关闭否则会导致内存的溢出以IO流为例为确保无论是否出现异常资源均被关闭应在finally块中手动关闭资源但这样会让程序中有大量的冗余 try-with-resources语句极大的简化了资源处理代码使开发者无需关心资源状态无需关心资源对象的创建顺序无需关心资源对象的正确关闭方式 import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Main {public static void main(String[] args) {getByteStreams();}public static void getByteStreams() {// 使用try-with-resources语句来创建输入流和输出流try (FileInputStream in new FileInputStream(D:/桌面/in.txt);FileOutputStream out new FileOutputStream(D:/桌面/out.txt)) {int c;while ((c in.read()) ! -1) {System.out.println(读取字节的10进制整数 c);out.write(c);}} catch (IOException e) {e.printStackTrace();}}
} 注意 1资源的自动关闭与异常无关。异常改怎么处理依然怎么处理。 2在try语句中声明使用资源后执行顺序 无异常在try块执行后自动关闭资源finally块 有异常自动关闭资源catch块finally块 路径 绝对路径始终包含根元素和查找文件所需的完整目录列表。 例如D:/test/a.txt。找到文件所需的所有信息都包含在路径声明中 相对路径例如a.txt。没有更多信息程序将无法访问。即相对路径最终也必须基于绝对路径描述。‘ Path接口:Path代表一个不依赖于系统的文件路径。即运行在不同操作系统下Path的具体实现不同(windows/linux)但开发者仅需面向Path描述路径不同系统而无需关心操作系统差异。 Path getFileName()返回文件名或名称元素序列的最后一个元素。即最后一个路径描述可能是文件名也可能是目录名 Path getParent()返回父目录的路径 Path getRoot()返回路径的根 Path resolve(Path other)方法将路径拼接为一个新路径 boolean equals(Object obj):重写了equals判断路径是否相同 Files工具类 java.nio.file.Files工具类提供了丰富的基于Path操作的静态方法读取/写入/操作文件与目录。方法分类 文件或目录的判断 boolean exists(Path path)/notExists(Path path)Path路径是否存在 Boolean isDirectory(Path path)path是否为目录 文件或目录的创建 Path createDirectory(Path dir) throws IOException。目录路径已存在则异常目录路径为多级目录异常 Path createDirectories(Path dir) throws IOException。自动创建多级不存在目录目录已存在无异常 Path createFile(path) throws IOException。基于指定路径创建文件。文件存在异常 文件或目录的复制 Path copy(Path source, Path target, CopyOption... options) throws IOException将文件复制到目标文件。默认如果文件已经存在异常 如果source为目录不会复制里面的文件仅相当于创建一个空目录 java.nio.file.StandardCopyOption枚举实现了CopyOption接口复制选项 文件或目录的移动 Path move(Path source, Path target, CopyOption... options) throws IOException将文件移动或重命名为目标文件。 默认如果目标文件存在则异常可通过options参数声明移动选项 如果在本目录下移动相当于文件改名 文件或目录的删除 void delete(Path path) throws IOException。删除指定路径路径不存在异常 boolean deleteIfExists(Path path) throws IOException。路径不存在不删除。返回是否删除成功 如果路径为目录目录中包含文件(即不为空)2种删除均异常 指定路径的遍历Files的方法 StreamPath walk(Path start, int maxDepth) throws IOException遍历基于指定深度遍历path路径中的目录和文件 StreamPath walk(Path start) throws IOException遍历path路径中的所有目录和文件包括子目录的观察遍历时的输出顺序按层次输出的。注意返回值是流后面可以用流的操作比如过滤排序等功能。可以借助于此方法删除非空目录 相关习题
1.以下能够正确描述C:/a/b路径的输出是
String p1 C:/; String p2 a; String p3 b;
A. System.out.println(p1 p2 p3);B. System.out.println(Path.of(p1 p2 p3));C. System.out.println(Path.of(p1).resolve(p2).resolve(p3));D. System.out.println(Path.of(p3).resolve(p2).resolve(p1)); 正确的输出是 C. System.out.println(Path.of(p1).resolve(p2).resolve(p3)); 该代码会将路径组合为 C:/a/b 并输出。Path.of() 方法用于创建路径对象resolve() 方法用于连接路径段。 2.如果在try-with-resources语句的try代码块内引发异常先执行catch块处理异常以及finally块后关闭资源
A. 对B. 错
3.InputStream的read(byte[] b)方法当流中字节数多于字节数组缓冲区容量时将抛出异常
A. 对B. 错 当使用 InputStream 的 read(byte[] b) 方法时如果流中的字节数多于字节数组缓冲区的容量该方法不会抛出异常。它会尽可能地将流中的数据读取到字节数组缓冲区中并返回实际读取的字节数。如果流中的字节数超过了缓冲区的容量它将只读取缓冲区大小的字节并返回该数量。剩余的字节将保留在流中可以通过后续的读取操作来获取。 4.OutputStream的write(byte[] b)方法会将字节数组缓冲区中的全部字节写入输出流
A. 对B. 错 当使用 OutputStream 的 write(byte[] b) 方法时会将字节数组缓冲区中的全部字节写入输出流。具体来说该方法会将字节数组 b 中的所有字节写入到输出流中以便将数据发送到目标位置。如果字节数组的长度大于输出流的缓冲区大小该方法会将全部字节写入输出流的缓冲区并尽可能地将缓冲区的内容发送到目标位置。 5.输入输出流默认均基于字符串完成文件的操作 A. 对 B. 错 输入输出流默认并不基于字符串完成文件的操作。输入输出流InputStream 和 OutputStream是用于字节级别的输入和输出操作的。它们用于处理字节数据而不是字符串数据。