java字节流和字符流的区别介绍
《Java基础入门》_课后习题答案大一计算机专业7
《Java基础入门》课后习题答案第7章IO(输入输出)一、填空题1、Java中的I/O流,按照传输数据不同,可分为:字节流、字符流2.在Buffer与Channel交互时,数据从:Channel、读取到Buffer 中,或从Buffer入到Channel 中。
3.用于将字节流转换为字符流的是:InputStreamReader、OutputStreamWriter2、NIO主要有三大核心部分:Buffer、Channel、Selector5、Java中提供了一个类:RandomAccesseFile,它不但具有读写文件的功能,而且可以随机地从文件的任何位置开始执行读写数据的操作。
二、判断题1. 如果一个File表示目录下有文件或者子目录,调用delete()方法也可以将其删除。
错2.对象序列化是指将一个Java 对象转换成一个I/0 流中字节序列的过程。
对3.Channel 是一个接口对象,它类似于传统的流对象。
对4.InputStream类的close()方法是用于关闭流并且释放流所占的系统资源。
对5,BufferedInputStream 和BufferedOutputStream 不是字节缓冲流。
错三、选择题1.下面选项中,哪些是标准输人输出流?(多选) (AB)A. System.InB.System. OutC.InputStreamD.OutputStream2.File类中以字符串形式返回文件绝对路径的方法是哪一项?(C)A. getParent()B. getNamel)C. getAbsolutePathOD. getPath()3.以下创建RandomAccessFile类实例对象的代码,哪些是正确的?(多选)(AB)A.new RandomAccessFile(new File("D:\\itcast\\dirl\test. java"),”rw”);B.new RandomAccessFile("D:\\itcast\\dirl\test. java","r");C. new RandomAccessFile("D:\\itcast\\dir1\\test.java");D. new RandomAccessFile("D:\\itcast\\dir1\\test.java","wr")4.以下选项中,哪个流中使用了缓冲区技术? (A)A. BufferedOutputStreamB. FileInputStreamC. DataOutputStreamD. FileReader5.以下选项中,关于Java NIO 中Buffer类的常用说法正确的是哪一项?(B)A.clearO方法会清除缓冲区数据,并将position 设置为0.limit 设置为capacity OB.fip()方法先将limit 设置为当前position 位置,然后再将pson设置为0C.mark()方法用于设置Buffer 的标记(mark),其能在0 与limi 之间做标记D.rewind()方法将position 设置为0,并设置mark 标记四、简答题1、简述I/O 流的概念。
javase练习题
javase练习题一、基础知识篇1. Java基本数据类型有哪些?分别写出它们的默认值。
2. 什么是封装?简述封装的优点。
3. 请写出Java中的四种访问修饰符,并说明它们的访问权限。
4. 什么是构造方法?它与普通方法的区别是什么?5. 在Java中,如何实现方法的重载和重写?二、面向对象篇2. 如何实现一个简单的Java类,包含两个属性和一个方法?3. 简述Java中的继承机制及其作用。
4. 什么是接口?与抽象类有什么区别?5. 请举例说明Java中的多态性。
三、集合框架篇1. Java集合框架中常用的集合类有哪些?2. 请简述ArrayList和LinkedList的区别。
3. 什么是HashMap?它的工作原理是什么?4. 请解释HashSet和TreeSet的区别。
5. 如何遍历一个List集合?四、异常处理篇1. 什么是异常?Java中的异常分为哪几类?2. 请举例说明trycatchfinally语句的使用方法。
3. 什么是自定义异常?如何创建和使用自定义异常?4. 请简述Java异常处理机制的作用。
int a = 10;int b = 0;int result = a / b;五、IO流篇1. 请简述Java IO流的分类。
2. 如何实现文件复制功能?3. 请解释字节流和字符流的区别。
4. 什么是序列化和反序列化?如何实现?5. 请举例说明Java中的文件操作。
六、多线程篇1. 什么是线程?线程和进程有什么区别?2. 请简述线程的生命周期。
3. 如何创建一个线程?有哪几种方式?4. 什么是线程同步?为什么需要线程同步?5. 请解释线程池的概念及其作用。
七、网络编程篇1. 请简述TCP和UDP协议的区别。
2. 如何实现一个简单的Socket通信?3. 什么是URL?如何解析一个URL?4. 请简述HTTP协议的工作原理。
5. 如何实现一个简单的HTTP服务器?八、Java新特性篇1. 请列举Java 8中的几个新特性。
字节流和字符流进行读写操作的一般步骤
字节流和字符流进行读写操作的一般步骤
字节流和字符流是 Java 中用于数据读写的两种基本流,它们有着不同的特点和应用场景。
在字节流中进行读写操作一般包括以下步骤:
1. 打开文件或输入输出流:使用相应的打开方法,如打开FileInputStream 或 FileOutputStream 对象,打开文件或输出流。
2. 读取数据:使用输入流的 read() 方法或 RandomAccessFile 类的 read() 方法读取数据,将其存储在字节数组或字符数组中。
3. 处理数据:对读取到的数据进行处理,如将其转换为字符串、打印到控制台等。
4. 关闭流:使用相应的关闭方法,如 FileInputStream.close() 或 FileOutputStream.close() 方法,关闭文件或输入输出流。
在字符流中进行读写操作一般也包括以下步骤:
1. 打开文件或输入输出流:与字节流相似,使用相应的打开方法打开文件或输入输出流。
2. 读取字符:使用输入流的 read() 方法或 RandomAccessFile 类的 read() 方法读取字符,将其存储在字符数组中。
3. 处理字符:对读取到的字符进行处理,如将其转换为字符串、打印到控制台等。
4. 关闭流:与字节流相似,使用相应的关闭方法,如FileInputStream.close() 或 FileOutputStream.close() 方法,关闭文件或输入输出流。
不过,在字符流中,读取的字符需要进行编码转换,以适应不同的字符编码方案。
例如,在读取文本文件时,需要将读取到的字符进行 UTF-8 编码转换,以确保读取的字符符合文本文件的格式。
java常见基础知识笔试题
java常见基础知识笔试题Java常见基础知识笔试题:一、Java基础语法1. 请解释Java中的变量和常量有什么区别?2. 请问Java中的关键字有哪些?请列举出来。
3. 请解释Java中的注释有哪几种形式?4. 请说一下Java的数据类型有哪些?5. 请解释Java中的运算符有哪些?二、面向对象1. 请解释面向对象的三大特性是什么?2. 请解释Java中的继承,多态,封装和抽象类分别是什么?3. 请解释Java中的接口是什么?4. 请解释Java中的重载和重写有什么区别?5. 请解释Java中的构造方法和普通方法有何区别?三、异常处理1. 请解释Java中的异常处理机制是什么?2. 请解释Java中的异常分类有哪些?3. 请解释Java中的异常处理关键字try,catch,finally的作用分别是什么?4. 请解释Java中的自定义异常是什么?5. 请解释Java中的异常链是什么?四、集合类1. 请解释Java中的集合类有哪些?2. 请解释Java中的ArrayList和LinkedList的区别。
3. 请解释HashSet和TreeSet的区别。
4. 请解释HashMap和TreeMap的区别。
5. 请解释Java中如何遍历一个集合?五、多线程1. 请解释Java中的线程是什么?2. 请解释Java中的线程实现方式有哪些?3. 请解释Java中的线程池是什么?4. 请解释Java中的synchronized关键字是做什么的?5. 请解释Java中的volatile关键字是做什么的?六、IO流1. 请解释Java中的IO是什么?2. 请解释Java中的字节流和字符流有什么区别?3. 请解释Java中的输入流和输出流有什么区别?4. 请解释Java中的文件读写操作步骤是什么?5. 请解释Java中的RandomAccessFile是什么?以上是java常见基础知识笔试题。
希望这些问题能够帮助读者熟悉Java的基础语法、面向对象、异常处理、集合类、多线程以及IO流的相关知识,在笔试中更好地发挥自己的能力。
java io面试题
java io面试题Java IO(Input/Output)是Java程序中进行输入输出的基础类库,它提供了一套丰富的类和方法,用于处理文件、网络连接、输入流和输出流等操作。
在Java开发中,掌握和理解Java IO的相关知识是非常重要的。
本文将介绍一些常见的Java IO面试题,帮助读者更好地应对面试。
1. 请解释一下Java IO的工作原理。
Java IO主要通过流(Stream)的方式来操纵数据。
流是输入/输出操作的顶级抽象类,它可以理解为是一个数据在源和目标之间的一个通道。
Java中的流按照输入和输出分成了两个体系:输入流(InputStream)和输出流(OutputStream),分别用于读取和写入数据。
其中,输入流从源读取数据,输出流向目标写入数据。
2. 请解释一下字节流和字符流的区别。
Java IO中的字节流(Byte Stream)操作的是8位字节,它适用于二进制文件和字节流形式的输入输出。
而字符流(Character Stream)操作的是16位Unicode字符,它适用于文本文件和字符流形式的输入输出。
字节流和字符流在处理文本文件时有很大的不同,字节流需要自己处理字符编码转换的问题,而字符流则提供了字符编码转换的功能。
3. 请解释一下Java IO中的四种基本的File类(File、FileReader、FileWriter、FileInputStream、FileOutputStream)的作用,并给出它们的示例使用方式。
- File类:用于表示文件或目录的路径,可以操作文件或目录的属性、创建和删除文件或目录等。
```javaFile file = new File("path/to/file.txt");boolean exists = file.exists();boolean isDirectory = file.isDirectory();```- FileReader和FileWriter类:用于从文件中读取字符流和向文件中写入字符流的操作。
Java中的字节,字符与编码,解码
Java中的字节,字符与编码,解码ASCII编码ASCII码主要是为了表⽰英⽂字符⽽设计的,ASCII码⼀共规定了128个字符的编码(0x00-0x7F),只占⽤了⼀个字节的后⾯7位,最前⾯的1位统⼀规定为0。
ISO-8859-1编码为了扩展覆盖其他语⾔字符,ISO组织在ASCII码基础上⼜制定了⼀系列标准⽤来扩展ASCII编码,它们是ISO-8859-1~ISO-8859-15,其中ISO-8859-1应⽤得最⼴泛。
ISO-8859-1仍然是单字节编码,它总共能表⽰256个字符。
ISO-8859-1向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII⼀致。
因为ISO-8859-1编码范围使⽤了单字节内的所有空间,在⽀持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。
换⾔之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。
Unicode,UCS2和UCS4Unicode是为整合全世界的所有语⾔⽂字⽽诞⽣的。
任何⽂字在Unicode中都对应⼀个值,这个值称为代码点(Code Point),常写成 U+XXXX的格式。
⽽⽂字和代码点之间的对应关系就有UCS-2和UCS-4。
UCS-2:⽤两个字节来表⽰代码点,其取值范围为 U+0000~U+FFFF。
UCS-4:为了能表⽰更多的⽂字,⼈们⼜提出了UCS-4,即⽤四个字节表⽰代码点。
它的范围为 U+00000000~U+7FFFFFFF,其中U+00000000~U+0000FFFF和UCS-2是⼀样的。
要注意,UCS-2和UCS-4只规定了代码点和⽂字之间的对应关系,并没有规定代码点在计算机中如何存储。
规定存储⽅式的称为UTF(Unicode Transformation Format),其中应⽤较多的就是UTF-8和UTF-16了。
UTF-8,UTF-16,UTF-32UTF-32是对应于UCS-4,不常⽤。
java字符流与字节流的区别是什么
java字符流与字节流的区别是什么java中字符流与字节流的区别:1、字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
2、字节流默认不使⽤缓冲区;字符流使⽤缓冲区。
3、字节流通常⽤于处理⼆进制数据,实际上它可以处理任意类型的数据,但它不⽀持直接写⼊或读取Unicode码元;字符流通常处理⽂本数据,它⽀持写⼊及读取Unicode码元。
字节流Java中的字节流处理的最基本单位为单个字节,它通常⽤来处理⼆进制数据。
Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了组基本的输⼊字节流和输出字节流。
InputStream类与OutputStream类均为抽象类,我们在实际使⽤中通常使⽤Java类库中提供的它们的⼀系列⼦类。
下⾯我们以InputStream类为例,来介绍下Java中的字节流。
InputStream类中定义了⼀个基本的⽤于从字节流中读取字节的⽅法read,这个⽅法的定义如下:public abstract int read() throws IOException;这是⼀个抽象⽅法,也就是说任何派⽣⾃InputStream的输⼊字节流类都需要实现这⼀⽅法,这⼀⽅法的功能是从字节流中读取⼀个字节,若到了末尾则返回-1,否则返回读⼊的字节。
关于这个⽅法我们需要注意的是,它会⼀直阻塞知道返回⼀个读取到的字节或是-1。
另外,字节流在默认情况下是不⽀持缓存的,这意味着每调⽤⼀次read⽅法都会请求操作系统来读取⼀个字节,这往往会伴随着⼀次磁盘IO,因此效率会⽐较低。
有的⼩伙伴可能认为InputStream类中read的以字节数组为参数的重载⽅法,能够⼀次读⼊多个字节⽽不⽤频繁的进⾏磁盘IO。
那么究竟是不是这样呢?我们来看⼀下这个⽅法的源码:public int read(byte b[]) throws IOException {return read(b, 0, b.length);}它调⽤了另⼀个版本的read重载⽅法,那我们就接着往下追:public int read(byte b[], int off, int len) throws IOException {if (b == null) {throw new NullPointerException();} else if (off < 0 || len < 0 || len > b.length - off) {throw new IndexOutOfBoundsException();} else if (len == 0) {return 0;}int c = read();if (c == -1) {return -1;}b[off] = (byte)c;int i = 1;try {for (; i < len ; i++) {c = read();if (c == -1) {break;}b[off + i] = (byte)c;}} catch (IOException ee) {}return i;}从以上的代码我们可以看到,实际上read(byte[])⽅法内部也是通过循环调⽤read()⽅法来实现“⼀次”读⼊⼀个字节数组的,因此本质来说这个⽅法也未使⽤内存缓冲区。
IO Stream
I/O流(熟练使用API)(一):简单介绍(java.io包)1:流的分类:(1)输入流/ 输出流:根据数据方向分类输入流:读取流输出流:写入流(2)字节流/ 字符流:根据数据单位分类(根据处理数据的不同来区分)(3)节点流/ 过滤流(包装流):根据流功能分类区别:(1)所有以inputstream/outstream为结尾的流都是字节流,以reader/writer为结尾的是字符流(但是桥转换流例外InputStreamReader/OutputStreamWriter)是一个包装流(2)节点流:可以直接读取源数据的流(直接点说:就是参数可以是数据源)过滤流:对节点流或者其他过滤流进行了包装的流(参数只能是某种定义好的流)。
字节流字符流备注FileOutputStream FileInputStream FileWriterFileReader二进制文件用字节流,字符文件用字符流PipedOutputStream PipedInputStream PipedWriterPipesReader主要用于线程间通信处理流(过滤流)BufferedOutputStream BufferedInputStreamBufferdWriterBufferedReader带有缓冲的流,只有在缓冲满的时候或者手动刷新的时候DataOutputStreamDataInputStream无读写基本类型的数据的方法PrintStream PrintWriter 主要用于记录日志,格式化的输出,所见即所输入,在构造的时候,确定是否自动刷新ObjectOutputStreamObjectInputStream无对象的序列化OutputStreamWriter InputStreamReader 无用于字节流和字符流的转化(桥转换流)Java IO的一般使用原则:一、按数据来源(去向)分类:1、是文件:FileInputStream, FileOutputStream, FileReader, FileWriter2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream3、是Char[]: CharArrayReader, CharArrayWriter4、是String: StringBufferInputStream, StringReader, StringWriter5、网络数据流:InputStream, OutputStream, Reader, Writer二、按是否格式化输出分:1、要格式化输出:PrintStream, PrintWriter三、按是否要缓冲分:1、要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter四、按数据格式分:1、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream 结束的子类2、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer 的子类五、按输入输出分:1、输入:Reader, InputStream类型的子类2、输出:Writer, OutputStream类型的子类六、特殊需要:1、从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter2、对象输入输出:ObjectInputStream, ObjectOutputStream3、进程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter4、合并输入:SequenceInputStream(序列流)5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):第一,考虑最原始的数据格式是什么:是否为文本?第二,是输入还是输出?第三,是否需要转换流:InputStreamReader, OutputStreamWriter?第四,数据来源(去向)是什么:文件?内存?网络?第五,是否要缓冲:bufferedReader (特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法)第六,是否要格式化输出:print?(二):使用注意:1:打开一个流之后,一定要注意关闭。
字节流与字符流的区别详解
字节流与字符流的区别详解先来看⼀下流的概念:在程序中所有的数据都是以流的⽅式进⾏传输或保存的,程序需要数据的时候要使⽤输⼊流读取数据,⽽当程序需要将⼀些数据保存起来的时候,就要使⽤输出流完成。
程序中的输⼊输出都是以流的形式保存的,流中保存的实际上全都是字节⽂件。
字节流与字符流在java.io包中操作⽂件内容的主要有两⼤类:字节流、字符流,两类都分为输⼊和输出操作。
在字节流中输出数据主要是使⽤OutputStream完成,输⼊使的是InputStream,在字符流中输出主要是使⽤Writer类完成,输⼊流主要使⽤Reader类完成。
(这四个都是抽象类)java中提供了专⽤于输⼊输出功能的包Java.io,其中包括:InputStream,OutputStream,Reader,WriterInputStream 和OutputStream,两个是为字节流设计的,主要⽤来处理字节或⼆进制对象,Reader和 Writer.两个是为字符流(⼀个字符占两个字节)设计的,主要⽤来处理字符或字符串.字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,⽽字节流处理单元为1个字节,操作字节和字节数组。
所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符⽽成的,所以它对多国语⾔⽀持性⽐较好!如果是⾳频⽂件、图⽚、歌曲,就⽤字节流好点,如果是关系到中⽂(⽂本)的,⽤字符流好点所有⽂件的储存是都是字节(byte)的储存,在磁盘上保留的并不是⽂件的字符⽽是先把字符编码成字节,再储存这些字节到磁盘。
在读取⽂件(特别是⽂本⽂件)时,也是⼀个字节⼀个字节地读取以形成字节序列字节流可⽤于任何类型的对象,包括⼆进制对象,⽽字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,⽽字符流就可以字节流是最基本的,所有的InputStrem和OutputStream的⼦类都是,主要⽤在处理⼆进制数据,它是按字节来处理的但实际中很多的数据是⽂本,⼜提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进⾏字符集的转化这两个之间通过InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统⼀⽽造成的==================我们还可以看到:============Reader类的read()⽅法返回类型为int :作为整数读取的字符(占两个字节共16位),范围在0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1inputStream的read()虽然也返回int,但由于此类是⾯向字节流的,⼀个字节占8个位,所以返回 0 到 255范围内的 int 字节值。
JavaIO流常见面试题
JavaIO流常见⾯试题JavaIO流常见⾯试题1. Java中有⼏种类型的流?1. 字符流和字节流。
2. 字节流继承inputStream和OutputStream3. 字符流继承⾃InputSteamReader和OutputStreamWriter4. 总体结构图2.字节流和字符流哪个好?怎么选择?1. ⼤多数情况下使⽤字节流会更好,因为⼤多数时候 IO 操作都是直接操作磁盘⽂件,所以这些流在传输时都是以字节的⽅式进⾏的(图⽚等都是按字节存储的)2. 如果对于操作需要通过 IO 在内存中频繁处理字符串的情况使⽤字符流会好些,因为字符流具备缓冲区,提⾼了性能3. 什么是缓冲区?有什么作⽤?1. 缓冲区就是⼀段特殊的内存区域,很多情况下当程序需要频繁地操作⼀个资源(如⽂件或数据库)则性能会很低,所以为了提升性能就可以将⼀部分数据暂时读写到缓存区,以后直接从此区域中读写数据即可,这样就显著提升了性。
2. 对于 Java 字符流的操作都是在缓冲区操作的,所以如果我们想在字符流操作中主动将缓冲区刷新到⽂件则可以使⽤ flush() ⽅法操作。
4. 字符流和字节流有什么区别?字符流和字节流的使⽤⾮常相似,但是实际上字节流的操作不会经过缓冲区(内存)⽽是直接操作⽂本本⾝的,⽽字符流的操作会先经过缓冲区(内存)然后通过缓冲区再操作⽂件5. 什么是Java序列化,如何实现Java序列化?1. 序列化就是⼀种⽤来处理对象流的机制,将对象的内容进⾏流化。
可以对流化后的对象进⾏读写操作,可以将流化后的对象传输于⽹络之间。
序列化是为了解决在对象流读写操作时所引发的问题2. 序列化的实现:将需要被序列化的类实现Serialize接⼝,没有需要实现的⽅法,此接⼝只是为了标注对象可被序列化的,然后使⽤⼀个输出流(如:FileOutputStream)来构造⼀个ObjectOutputStream(对象流)对象,再使⽤ObjectOutputStream对象的write(Object obj)⽅法就可以将参数obj的对象写出6. PrintStream、BufferedWriter、PrintWriter的⽐较?1. PrintStream类的输出功能⾮常强⼤,通常如果需要输出⽂本内容,都应该将输出流包装成PrintStream后进⾏输出。
Java进阶知识
Java进阶知识常见异常:空指针异常NullPointerException,调⽤了未经初始化的对象或不存在的对象,或访问或修改了null对象的属性或⽅法;找不到类名异常ClassNotFoundException,的确不存在,开发环境进⾏了调整或,如类的根⽬录结构、编译运⾏时发⽣变化的等;类名不合法异常IllegalAgreementException,向⽅法传递了不合法或不正确的参数;输⼊不匹配异常InputMismatchException,由scanner抛出表获取内容与期望类型的模式不⼀致或内容超出预期;IllegalAccessException,应⽤程序试图创建⼀个实例、设置或获取⼀个属性,或调⽤⼀个⽅法,但当前正在执⾏的⽅法⽆法访问指定类、属性、⽅法或构造⽅法的定义时;ClassCastExceptiom,当试图将对象转换为不是实例的⼦类时抛出;SQLException,数据库访问或其他错误信息的异常;IOException,发⽣某种I/O异常。
运⾏时异常和检查时异常的区别:运⾏时异常,不要求程序在编译时对异常进⾏处理,也能编译通过;检查时异常⼜称⾮运⾏异常,要求程序员必须在编译时进⾏处理,否则编译不通过。
【企业⾯试常考】ArrayList和LinkList的区别:前者采⽤数组进⾏顺序存储,在插⼊或删除数据时,需要批量移动数据元素,故性能较差;在查询数据元素时,因为数组是是连续存储的,可以通过下标进⾏访问,故在遍历元素或随机访问元素时效率⾼。
LinkList则相反。
顺序存储结构和链式存储结构的优缺点:前者优点:节省存储空间(分配的存储单元全⽤来存放节点的数据,节点间逻辑关系没有占⽤额外的存储空间);增加访问速度(存储单元存放可实现节点的随机存取);查找速度快。
缺点:插删慢后者优点:插删快。
缺点:占⽤空间⼤(每个节点都由数据域和指针域组成);查找速度慢(通过指针逐个查找)。
栈和队列两种数据结构特点:栈Stack:先进后出或后进先出;只能在⼀端进⾏插⼊和删除操作的特殊的线性表。
Java输入输出流(一)——常用的输入输出流
Java输⼊输出流(⼀)——常⽤的输⼊输出流1.流的概念:在Java中,流是从源到⽬的地的字节的有序序列。
Java中有两种基本的流——输⼊流(InputStream)和输出流(OutputStream)。
根据流相对于程序的另⼀个端点的不同,分为节点流和过滤流。
(1)节点流:以特定源如磁盘⽂件、内存某区域或者线程之间的管道为端点的构造输⼊输出流,是⼀种基本的流。
(2)过滤流:以其他已经存在的流为端点构造的输⼊输出流。
根据流中的数据单位分为字节流和字符流。
(1)字节流:流中的数据是以8位字节为单位进⾏读写,以InputStream和OutputStream为基础类。
(2)字符流:流中的数据是以16为字符为单位进⾏读写,以Reader和Writer为基础类。
2.字节流InputStream和OutputStream是字节流的两个顶层⽗类,提供了输⼊流类和输出流类的通⽤API。
2.1 输⼊字节流InputStream基本⽅法:(1)基本读⽅法;: int read() int read(byte[] b) int read(byte[] b,int off,int len)(2) 关闭流:void close()(3) 返回输⼊流中还有多少可读字节 int available()(4) 跳过指定字节 long skip(long n)(5) 回读数据 boolean markSupported() void Mark(int readlimt) void reset()2.2 输出字符流OutputStream基本⽅法:(1)基本写⽅法:void write(int c) void write(byte[] b) void write(byte[] b,int off,int len)(2) 关闭流:void close()(3)q强制输出:void flush()3.字符流:Reader和Writer是字符流的顶层⽗类,字符流能够处理Unicode字符集中的所有字符。
05-Java中的IO与NIO面试题(15题)-新增
1、Java 中IO 流?Java 中IO 流分为几种?1.按照流的流向分,可以分为输入流和输出流;2.按照操作单元划分,可以划分为字节流和字符流;3.按照流的角色划分为节点流和处理流。
Java Io 流共涉及40 多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系,Java I0 流的40 多个类都是从如下4 个抽象类基类中派生出来的。
1.InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
2.OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
2、Java IO与NIO的区别NIO即New IO,这个库是在JDK1.4中才引入的。
NIO和IO有相同的作用和目的,但实现方式不同,NIO 主要用到的是块,所以NIO的效率要比IO高很多。
在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。
3、常用io类有那些4、字节流与字符流的区别以字节为单位输入输出数据,字节流按照8位传输以字符为单位输入输出数据,字符流按照16位传输5、阻塞IO 模型最传统的一种IO 模型,即在读写数据过程中会发生阻塞现象。
当用户线程发出IO 请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出CPU。
当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除block 状态。
典型的阻塞IO 模型的例子为:data = socket.read();如果数据没有就绪,就会一直阻塞在read 方法6、非阻塞IO 模型当用户线程发起一个read 操作后,并不需要等待,而是马上就得到了一个结果。
如果结果是一个error 时,它就知道数据还没有准备好,于是它可以再次发送read 操作。
一旦内核中的数据准备好了,并且又再次收到了用户线程的请求,那么它马上就将数据拷贝到了用户线程,然后返回。
简答题整理
1. 请说明一个JAVA 类中主要包含哪几个元素?并说明每种元素的作用。
JAVA类中主要包含属性、方法、构造方法、块以及内部类。
属性用来定义对象的数据;方法用来定义对象的行为;构造方法可以用来创建对象;块能够用来在类加载时执行操作或者在每次实例化前执行通用操作;内部类作为类的一个成员存在,能够访问外部类的属性和方法。
2. 请说明构造方法的作用和特征构造方法的作用是用来创建对象,使用new关键字调用。
构造方法的名字必须与类的名字相同,并且大小写敏感,同时构造方法不能声明返回值类型,可以使用任意一种访问修饰符,但是不能使用其他修饰符进行修饰,如static、final、abstract等修饰符都可以修饰构造方法。
3. 请列举Java 语言中的权限访问修饰符,并说明每种权限的含义。
Java语言中有四种权限访问修饰符,即public、protected、同包default以及private.public表示公共权限,即任何包中都可以访问:protected表示受保护权限,即同包中可以访问,不同包中的子类可以访问:同包default权限是默认权限,即不显示指明权限修饰符的时候就是同包权限,表示只有同包中可以访问:private 是私有权限,表示只能在本类中访问。
4. 请列举Java 语言中的八种基本数据类型,并说明每种数据类型的含义及长度。
Java语言的八种基本数据类型有:byte字节型,8位长度:short短整型,16位长度,int整型,32位长度:long长整型,64位长度:float单精度浮点型。
32位长度:double双精度浮点型,64位长度:char字符型,16位长度:boolean 型,表示逻辑值,有true和false两个值,分别表示真和假。
5. String 类和StringBuffer 类和StringBuilder 类有什么区别?一String字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象。
关于Java的File.separator
关于Java的File.separator⼀、File类在Windows下的路径分隔符(\)和在Linux下的路径分隔符(/)是不⼀样的,当直接使⽤绝对路径时,跨平台会报No Such file or diretory异常。
File中还有⼏个与separator类似的静态常量,与系统有关,在编程中应尽量使⽤。
ps:File file = new File("G:"+ File.separator +"demo.txt");File类是java.io包中唯⼀⼀个与⽂件本⾝操作有关的类,⽂件本⾝操作是指⽂件的创建、删除、重命名等 .构造⽅法:public File(String pathName),传⼊完整的路径,WEB开发此⽅式⽐较好⽤。
.构造⽅法:public File(File parent,String child),传⼊⽗路径和⼦路经。
基本的⽂件操作: .创建新⽂件:public boolean createNewFile() throws IOException; .删除⽂件:public boolean delete(); .判断⽂件是否存在:public boolean exists();import java.io.File;import java.io.IOException;public class TestFile {public static void main(String [] args) throws IOException{File file = new File("G:\\demo.txt");System.out.println("file:"+file);if(file.exists()){file.delete();System.out.println("执⾏了删除⽂件!");}else{file.createNewFile();System.out.println("执⾏了创建⽂件");}}}如果进⾏⽂件创建时有⽬录,则需要先创建⽬录之后才可以创建⽂件。
全国自考04747《JAVA语言程序设计一》2009-2017年简答题整理(参考答案)
表达式21.请写出表示year年是闰年的Java表达式。
闰年的条件是:每4年一个闰年,但每100年少一个闰年,每400年又增加一个闰年。
(year%4==0 && year%100!=0 || (year%400==0)21.请写出表示以下条件的表达式:变量x的值为1与变量y的值为2,有且只有一个成立。
(2)x==1 && y!=2 || y==2 && x!=121. 请写出表示条件“y右移一位后大于3并且y不等于0”成立的Java表达式。
y>>1>3 && y!=0If语句21.请写出一段if语句,判断一个整数n是否为偶数。
如果是偶数,输出“Yes.”;否则,输出“No.”。
if(n%2==0)System.out.println(“Yes.”);elseSystem.out.println(“No.”);21.请写一个if语句,判断整数n是否同时满足“被3除余2,被7除余1”的条件,满足时输出“OK”,否则输出“NO”。
if(n%3==2&&n%7==1)System.out.print(“OK”);elseSystem.out.print(“NO”);21.请写出实现计算y=|x|的if语句。
(2)(201810)if(x>=0)y=x;elsey=x*(-1);While语句21.请写出以下程序段的执行结果。
int c=0,d,n=3758;while(n>0){if((d=n%l0)>c)c=d;n=n/10;}System.out.println("结果="+c);结果=821.以下语句有一处错误,请改正,然后写出此循环语句的循环次数。
int i=7;do{System.out.println(i--); i--;}while(i!=0);//while(i>0); 循环4次21.请写出下面程序段的执行结果。
计算机二级java复习题库
计算机二级java复习题库在准备计算机二级Java考试时,考生需要对Java语言的基础概念、语法、面向对象编程、异常处理、集合框架、多线程以及输入输出流等有深入的理解和掌握。
以下是一些复习题,可以帮助考生检验自己的学习效果。
1. Java基础概念- 简述Java语言的特点。
- 描述Java虚拟机(JVM)的作用。
- 说明Java中的“一次编译,到处运行”是如何实现的。
2. Java数据类型和运算符- 列举Java的基本数据类型,并说明它们在内存中的存储大小。
- 描述Java中的运算符,包括算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符。
3. 控制语句- 说明if-else语句和switch-case语句的区别。
- 描述循环语句for、while和do-while的用法和区别。
4. 数组和字符串- 阐述Java中数组的声明、初始化和访问方式。
- 描述字符串的不可变性及其对性能的影响。
5. 面向对象编程- 简述面向对象编程的三大特性:封装、继承和多态。
- 描述Java中类和对象的关系,以及如何创建和使用对象。
6. 类和接口- 说明Java中类和对象的基本概念。
- 描述接口的作用及其与抽象类的区别。
7. 异常处理- 描述Java中异常的分类和处理机制。
- 说明如何使用try-catch-finally语句块处理异常。
8. 集合框架- 简述Java集合框架的组成,包括List、Set、Map等。
- 描述ArrayList、LinkedList、HashSet、TreeSet和HashMap的实现原理和使用场景。
9. 多线程- 描述Java中线程的创建方式和生命周期。
- 说明线程同步和死锁的概念及其解决方法。
10. 输入输出流- 描述Java中字节流和字符流的区别。
- 说明如何使用FileInputStream、FileOutputStream、BufferedReader和BufferedWriter等类进行文件操作。
java初级面试题汇总(附答案)
java初级⾯试题汇总(附答案)本⾯试题分为⼗⼋个模块,分别是:Java 基础、多线程、反射、对象拷贝、Java Web 、异常、⽹络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM,如下图所⽰:共包含 208 道⾯试题,本⽂的宗旨是为读者朋友们整理⼀份详实⽽⼜权威的⾯试清单,下⾯⼀起进⼊主题吧。
模块⼀Java 基础1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,Java 开发⼯具包,提供了 Java 的开发环境和运⾏环境。
JRE:Java Runtime Environment 的简称,Java 运⾏环境,为 Java 的运⾏提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的⼯具。
简单来说:如果你需要运⾏ Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。
2. == 和 equals 的区别是什么?对于基本类型和引⽤类型 == 的作⽤效果是不同的,如下所⽰:基本类型:⽐较的是值是否相同;引⽤类型:⽐较的是引⽤是否相同;代码⽰例:String x = "string";String y = "string";String z = new String("string");System.out.println(x==y); // trueSystem.out.println(x==z); // falseSystem.out.println(x.equals(y)); // trueSystem.out.println(x.equals(z)); // true代码解读:因为 x 和 y 指向的是同⼀个引⽤,所以 == 也是 true,⽽ new String()⽅法则重写开辟了内存空间,所以 == 结果为false,⽽ equals ⽐较的⼀直是值,所以结果都为 true。
java各详细总结知识点
java各详细总结知识点一、Java语法1. 数据类型Java中的数据类型分为基本数据类型和引用数据类型。
基本数据类型包括整型,浮点型,字符型和布尔型。
引用数据类型包括类、接口、数组等。
2. 变量在Java中,变量是用来存储数据的容器。
它们可以存储不同类型的数据,例如整数、浮点数、字符等。
变量分为局部变量和成员变量。
3. 运算符Java中的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。
这些运算符可以实现数据的计算和比较。
4. 控制流Java中的控制流包括顺序结构、选择结构和循环结构。
通过控制流语句,程序可以根据条件执行不同的代码块,实现不同的功能。
5. 方法方法是Java中用来组织和重用代码的一种机制。
它可以细化程序的逻辑结构,并提高代码的可读性和可维护性。
6. 数组数组是一种用来存储多个相同类型数据的容器。
在Java中,数组可以是一维的、二维的甚至多维的。
使用数组可以方便地管理大量数据。
7. 字符串在Java中,字符串是一种特殊的对象类型。
Java提供了丰富的字符串处理方法,例如字符串连接、子字符串提取、字符串比较等。
8. 输入输出在Java中,通过输入输出流可以实现与外部设备的交互。
Java提供了丰富的输入输出类和方法,可以实现文件的读写、网络通信等功能。
二、面向对象编程1. 类和对象在Java中,所有的代码逻辑都是围绕类和对象展开的。
类是一种模板,描述了对象的属性和行为。
对象是类的实例,可以根据类创建多个对象。
2. 封装封装是面向对象编程的核心思想之一。
通过封装,可以将数据和行为封装在一个对象中,避免外部直接访问对象的数据。
3. 继承继承是一种代码复用的机制,可以让子类继承父类的属性和方法。
通过继承,可以实现类与类之间的层次关系,提高代码的重用性和扩展性。
4. 多态多态是面向对象编程的另一个核心概念。
通过多态,可以使不同类的对象对同一消息作出不同的响应。
多态性可以提高代码的灵活性和可扩展性。
java后台开发面试题
java后台开发面试题一、面试题概述Java后台开发是一种广泛应用的技术领域,随着互联网的快速发展,对于优秀的Java后台开发人员的需求也越来越高。
在Java后台开发的面试中,常常会涉及到各种技术和知识点,本文将介绍一些常见的Java后台开发面试题及其解答,帮助读者全面了解这一领域的知识要点。
二、Java基础知识1. 什么是Java?Java的特点是什么?Java是一种跨平台的面向对象编程语言,具有简单、面向对象、健壮、安全、可移植、高性能、多线程等特点。
2. 请简述Java的基本数据类型。
Java的基本数据类型包括byte、short、int、long、float、double、char和boolean。
3. Java中String和StringBuilder的区别是什么?String是不可变的,在对String进行修改时会产生新的String对象,而StringBuilder是可变的,可以直接修改原有的内容。
4. 什么是Java中的自动装箱和拆箱?自动装箱是指将基本类型转换为对应的包装类对象,而拆箱是指将包装类对象转换为基本类型。
5. Java中的异常处理机制是什么?Java中的异常处理机制通过try-catch-finally语句块来实现。
当程序发生异常时,会被抛出并可以通过catch块捕获并处理,finally块中的代码不论是否发生异常都会被执行。
三、Java高级知识1. 简述Java的多态性是如何实现的。
Java的多态性通过继承和接口实现。
通过继承,子类可以覆盖父类的方法从而实现多态性;通过接口,可以使不同的类实现相同的接口,从而实现多态性。
2. 什么是Java的序列化和反序列化?Java的序列化是将一个对象转换为二进制数据的过程,反序列化是将二进制数据恢复为一个对象的过程。
可以通过实现Serializable接口来实现序列化和反序列化。
3. 请简述Java的线程同步机制。
Java的线程同步机制通过synchronized关键字实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字节流和字符流
在整个IO包中,流的操作分为两种:
·字节流
|·字节输出流OutputStream、字节输入流InputStream ·字符流:一个字符= 两个字节
|·字节输出流Writer,字节输入流Reader
IO操作的基本步骤:
1、使用File找到一个文件
2、使用字节流或字符流的子类为OutputStream、InputStream、
Writer、Reader进行实例化操作
3、进行读写的操作
4、关闭:close(),在流的操作中最终必修进行关闭。
字节输出流:OutputStream
在Java io中OutputStream是字节输出流的最大父类。
此类是一个抽象类,所以使用时修要依靠子类进行实例化操作。
如果此时要完成文件的输出操作,则使用FileOutputStream为OutputStream进行实例化操作:
OutputStream out = new FileOutputStream(File f) OutputStream提供了一下的写入数据的方法:
·写入全部字节数组:pubic void writer (byte[] b)throws IOException
·写入部分字节数组:public void writer(byte[] b ,int off,int len)throws IOException
·写入一个数据:public abstract void writer (int b)throws IOException
如果要向文件中追加内容则需要调用FileOutputStream类的另外一个构造方法:
pubic OutputStream(File file ,booleam append) throws FileNotFoundException,如果将append的内容设置为true,则表示增加内容。
字节输入流:InputStream
使用InputStream可以读取输入流的内容
此类也是一个抽象类,同样需要使用子类对象进行实例化,如果现在是文件操作则使用
FileInputStream,
·FileInputStream的构造方法:
public FileInputStream(File file) throws FileNotFoundException ·将内容读入字节数组中:pubic int read(byte[] b)throws IOException ·每次读入一个数据:public abstract void read (int b)throws IOException
范例:将文件中的内容读取进来
以上是一种比较常见的读取形式,但是以上的代码有一个缺点,会受到开辟空间大小的限制,如果想动态的开辟数组空间,则可以根据文件的大小来决定。
采用read()方法一个个的读取数据。
字符输出流:Writer
Writer类是IO包中操作字符的最大父类,主要功能是完成字符流的输出。
Writer类同OutputStream类一样,都属于抽象类,如果要进行文件的保存,则使用FileWriter类进行实例化。
写入操作:public void write(String str)throws IOException,不再用将String转换为byte
追加内容:
字符输入流:Reader
Reader与OutputStream的不同的是使用的是char数组
Reader是一个抽象类,进行文件读取要使用FileReader
读取的方法:
·读取一组字符:public int read(char[] cbuf)throws IOException
·读取一个个字符public int read() throws IOException
字符流于字节流的区别
字节流在操作的时候是直接与文件本身关联,不使用缓冲区|·字节流——>文件
字符流在操作的时候是通过缓冲区与文件关联
|·字节流——>缓冲区——>文件
综合比较,在传输或者在硬盘上保存的内容都是以字节的形式存在的,所以字节流的操作比较多,但是在操作中文的时候字符流比较好使;
作业
使用IO操作完成一个文件的拷贝功能,模仿DOS中的copy名令,代码开发的时候使用java的初始化参数完成,。