Java IO Q&A
2021-08-27 16:19:11 80 举报
AI智能生成
Java IO Q&A
作者其他创作
大纲/内容
文件API
Q: File类可以用来做目录操作吗?
A:可以。File对象本身可以是目录。调用file.mkdirs()即可创建目录。
A:可以。File对象本身可以是目录。调用file.mkdirs()即可创建目录。
Q:直接调用file.delete()可以删除目录吗?
A:如果是文件或者空目录,可以直接删除。
但如果目录中有文件或者子目录,则必须手动for递归删除。
A:如果是文件或者空目录,可以直接删除。
但如果目录中有文件或者子目录,则必须手动for递归删除。
Q: 有哪些方法判断给定路径下文件是否存在?
A: File类的exists方法: file.exist(string)
File类的静态exist方法, File.exist(Path path)
A: File类的exists方法: file.exist(string)
File类的静态exist方法, File.exist(Path path)
字节输入流InputStream
- 字节数组byte[] 作为输入源的InputStream类是————ByteArrayInputStream
- 用文件作为输入源的InputStream类是?————FileInputStream
- 用字符串作为输入源的是?————StringBufferInputStream
- 用于多线程之间管道通信的输入源是————PipeInputStream
Q: FilterInputStream是什么?
A: 用于装饰上面这些输入流的,可以叠加,每装饰一层就相当于增加了1个功能。
装饰后,不仅可读字符串,还可读取例如int、long等java基本类型的是————DataInputStream
装饰后,支持分批缓冲读取读取的是————BufferedInputStream
装饰后,具有1个能回退上一个字节的缓冲区————PushbackInputStream
装饰后,用于反序列化读入————ObjectInputStream
装饰后,可跟踪输入流中的行号————LineNumberInputStream
A: 用于装饰上面这些输入流的,可以叠加,每装饰一层就相当于增加了1个功能。
装饰后,不仅可读字符串,还可读取例如int、long等java基本类型的是————DataInputStream
装饰后,支持分批缓冲读取读取的是————BufferedInputStream
装饰后,具有1个能回退上一个字节的缓冲区————PushbackInputStream
装饰后,用于反序列化读入————ObjectInputStream
装饰后,可跟踪输入流中的行号————LineNumberInputStream
字节输出流OutputStream
OutputStream包含
- ByteArrayOutputStream 输出到缓冲区
- FileOutputStream 写到文件
- PipedOutputStream 写入管道
- FilterOutputStream
- DataOutputStream (可以out.writexxx各种类型的数据,writeDouble, writeUTF, reader也一样,可以读想要的数据类型)、
- PringtStream (输出到文件用这个, 该类.println(str)即可写入文件)
- BufferOutputString
Q:new FileOutputStream(name, true),这个构造里的true参数是做什么用的?
A:是否支持在文件末追加的意思。默认是false,指的是覆盖整个文本。如果设置成true,会在要写入的文件后面追加本次写入的内容。
A:是否支持在文件末追加的意思。默认是false,指的是覆盖整个文本。如果设置成true,会在要写入的文件后面追加本次写入的内容。
Q:
- BufferOutputStream里的flush()方法是做什么的?
- BufferOutputStream调用close后,会触发flush()来刷新缓冲区吗?
- BufferOutputStream调用close可能会丢数据吗?
- BufferOutputStream多次调用close会报错吗?
- flush把缓冲区里的数据写入文件,并刷新缓冲区
- close关闭此输出流并释放与此相关联的任何系统资源, 会调用flush,除了flushBuffer,还会调用父类的flush。
- 不会丢数据,因为上面这条原因。
- 多次调用不会报错。
Reader和Writer
Q: Reader/Writer和InputStream/OutputStream的区别?
A:
A:
- InputStream是表示 字节输入流 的所有类的超类
- Reader是用于读取 字符流 的抽象类
- InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。
- Reader/Writer提供兼容Unicode、面向字符的IO功能,为了国际化
数组拷贝
Q: System.arraycopy的效率和Arrays.copyOf的效率哪个快?
A:效率最高的是System.arraycopy.
因为Arrays.copyOf底层其实也是用的System.arraycopy ,所以效率自然低于System.arraycpoy()。
System.arraycpoy()使用native本地方法实现
A:效率最高的是System.arraycopy.
因为Arrays.copyOf底层其实也是用的System.arraycopy ,所以效率自然低于System.arraycpoy()。
System.arraycpoy()使用native本地方法实现
Q: System.arraycopy()用来拷贝某些类对象时, 是深拷贝还是浅拷贝?
A:属于浅拷贝。只拷贝对象本身,不拷贝对象包含的引用指向的对象;
A:属于浅拷贝。只拷贝对象本身,不拷贝对象包含的引用指向的对象;
0 条评论
下一页