A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2018-8-23 20:59  /  3751 人查看  /  47 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.什么是输入流?什么是输出流?输入流从硬盘读取到内存中,
输出流从内存写入硬盘。
2.输入流读取有几种方式,输出流写出有几种方式?
字节输出流、write(int i )、write(btye[] b)、write(byte[] b,int f,int l)
字节输入流:read(int i),read(btye[] b)、read(byte[] b,int f,int l)
字符输出流:write(String string)、write(char[] char)、write(int i),write(String string,int f,int l),write(char[] char,int f,int i)
字符输入流:read(char[] char)、,read()
3.字符流和字节流的区别?
字符流的底层是字节流,可以对任何文件输入输出,不会使用缓冲区,直接读写到硬盘
字符流可以直接写入字符串,只能对文本输入输出,需要使用缓冲区,间接读写到硬盘
4.JDK7之前,JDK7和JDK7之后对IO流异常的处理有什么变化?

JDK7之前IO流只能定义在try的外面
JDK7IO流可以定义在try()的括号里面,且可以自动关闭流,不需要调用close方法
JDK7之后,可以将IO流定义在try外面,try的括号内写入IO流的变量名,也不需要手动关闭流
回复 使用道具 举报
邹毅涛
1.什么是输入流?什么是输出流?
将外部数据读取到内存中叫输入流。
将内存中的字节写出到外部为输出流。
2.输入流读取有几种方式,输出流写出有几种方式?
输入流读取和输出流写出都有字节输入流和字符输入流两种方式。
3.字符流和字节流的区别?
字符流操作的是字符,字节流则是字节。字符流可以解决编码问题。计算机最小存储单元为字节。
4.JDK7之前,JDK7和JDK7之后对IO流异常的处理有什么变化?
JDK7之前用try CatchFinally需要手动释放资源。
JDK7-JDK9改为try with resource try中语句执行完自动释放资源
JDK9之后try中写对象,代码简洁,但仍需抛出异常,执行完也会自动释放资源。
回复 使用道具 举报
----------------吴齐宾-------------------
1.什么是输入流?什么是输出流?
输入流:数据从外部流入内存.输出流:从内存输出到外部;
2.输入流读取有几种方式,输出流写出有几种方式?
输入流读取有两种方式:
1.fileinputstream
2.filereader
输出流写出有两种方式:
1.fileoutputstream
2.filewrieter
3.字符流和字节流的区别?
字符流基本只运用于文本文档的传输,而字节流可以适用于大部分的文件传输
4.JDK7之前,JDK7和JDK7之后对IO流异常的处理有什么变化?
1.1.7之前try....catch....finally
2.1.7之后try-with-sourse,自动释放资源
3.1.7之后引入了对像的引用
回复 使用道具 举报
KinLong Yu
1.什么是输入流?什么是输出流?
    1、输入流是指把数据从其他设备上读取到内存中的流。
    2、输出流是指把数据从内存中写出到其他设备上的流。

2.输入流读取有几种方式,输出流写出有几种方式?
输入流读取有字节输入和字符输入两种;输出流也是有字节输出和字符输出两种。

3.字符流和字节流的区别?
字符流是指操作字符文本的流,底层还是字节流,是为了解决编码问题二产生的。
字节流是以二进制的形式读写文件的,在计算机中所有的文件都是以二进制的形式存储。

4.JDK7之前,JDK7和JDK7之后对IO流异常的处理有什么变化?
7之前异常是以 try{}catch{}finally{}的形式,或者用throws声明出去。
8的时候出现了try(){}catch{} try后面的的参数是创建流对象,这样就能直接关闭资源
9的时候在8的基础上可以在参数中直接写对象,但是还是需要用throws将异常声明出去。
回复 使用道具 举报

1.什么是输入流?什么是输出流?  输入流:内存从硬盘读取数据;
  输出流:内存把数据写到硬盘;
2.输入流读取有几种方式,输出流写出有几种方式?
   字节、字符输入流;
   字节、字符输出流;
3.字符流和字节流的区别?
   字节流可以用于任何对象,而字符流只能处理字符或字符串;
4.JDK7之前,JDK7和JDK7之后对IO流异常的处理有什么变化?

  jdk7前:try.....catch....finally..
  jdk7后:try-with-sourse,自动释放资源
  jdk9:需要在try代码块之上创建流对象
回复 使用道具 举报
1.什么是输入流?什么是输出流?
把数据从其他设备上读取到内存中,叫输入流。
把数据从内存中写出到其他设备上,叫输出流。
2.输入流读取有几种方式,输出流写出有几种方式?
  字节输入流读取有2种方式。   read(),read(byte[] bytes)。
  字节输出流写出有3种方式。write(int b);write(byte[] bytes);write(byte[] bytes ,  int off ,  int len)。
  字符输入流读取有2种方式        read(),read(char[] chars)
  字符输出流写出有5种方式   write(int b);write(char[] chars);write(char[] chars ,  int off ,  int len);  write(String str) ;  write(String str, int off ,  int len )
3.字符流和字节流的区别?
字符流是以字符为单位读写数据的流
字节流是以字节为单位读写数据的流
字节流和字符流部分方法传输的参数不一致,字符流只能对文本进行IO操作,而字节流可以对更多类型文件进行IO操作
4.JDK7之前,JDK7和JDK7之后对IO流异常的处理有什么变化?resource 语句,在try()的括号中创建流对象语句,如果多个,使用';'隔开 ,它会自动处理创建流对象时产生的异常,但是括号内的异常必须实现AutoCloseable,在try执行结束后关闭流。
JDK7之后 try-with-resource 的改进,对于引入对象的方式,支持的更加简洁。被引入的对象,同样可以自动关闭,无需手动close,当是在外部创建流对象依旧会抛出异常。
  JDK7之前使用try.....catch....finally...代码块
  JDK7使用try-with-sourse语句,无需手动close
  JDK9在JDK7的基础上引入对象的方式,无需手动close
回复 使用道具 举报
1、缓冲流为什么会提高IO流读写的效率?
   主要是利用了在内存中开辟的buf空间来实现的,减少了直接消耗系统IO资源的次数,从而提高了性能。

2
、我们在读写过程中,什么情况下会发生写入乱码问题?是怎样产生的?我们是如何解决的
    Java读取文件的方式总体可以分为两类:按字节读取和按字符读取。
    按字节读取就是采用InputStream.read()方法来读取字节,然后保存到一个byte[]数组中,最后经常用new String(byte[]);把字节数组转换成String。在最后一步隐藏了一个编码的细节,new String(byte[]);会使用操作系统默认的字符集来解码字节数组,中文操作系统就是GBK。而我们从输入流里读取的字节很可能就不是GBK编码的,因为从输入流里读取的字节编码取决于被读取的文件自身的编码。举个例子:我们在D:盘新建一个名为demo.txt的文件,写入”我们。”,并保存。此时demo.txt编码是ANSI,中文操作系统下就是GBK。此时我们用输入字节流读取该文件所得到的字节就是使用GBK方式编码的字节。那么我们最终new String(byte[]);时采用平台默认的GBK来编码成String也是没有问题的(字节编码和默认解码一致)。试想一下,如果在保存demo.txt文件时,我们选择UTF-8编码,那么该文件的编码就不在是ANSI了,而变成了UTF-8。仍然采用输入字节流来读取,那么此时读取的字节和上一次就不一样了,这次的字节是UTF-8编码的字节。两次的字节显然不一样,一个很明显的区别就是:GBK每个汉字两个字节,而UTF-8每个汉字三个字节。如何我们最后还使用new String(byte[]);来构造String对象,则会出现乱码,原因很简单,因为构造时采用的默认解码GBK,而我们的字节是UTF-8字节。正确的办法就是使用new String(byte[],”UTF-8”);来构造String对象。此时我们的字节编码和构造使用的解码是一致的,不会出现乱码问题了。

3、序列化流中的serialVersionUID的作用?
    对于jvm来说,要进行持久化的类必须要有个标记,相当于一个通行证,只有持有这个通行证,jvm才让类创建的对象进行持久化。这个通行证就是Serializable接口,这个接口将类与一个称为serialVersionUID的变量关联起来,这个serialVersionUID就是在反序列化中用来确定由哪个类来加载这个对象。
最好在实现serializable接口时,设定serialVersionUID为某个值,不然当在传输的某一端修改实体类时,serialVersionUID会被虚拟机设置成一个新的值。造成两端的serialVersionUID不一致会发生异常。
    需要注意的地方是,serialVersionUID不是决定由哪个类加载硬盘文件中的唯一因素,类的包名、类的名称都有关联。如果不一致,也会出现类型转化错误。原因是类的包名,类名已经被写入了文件当中。

4、请根据自己的语言表述IO流的体系
     在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了
      Java I/O主要包括如下几个层次,包含三个部分:
   1.流式部分――IO的主体部分;
   2.非流式部分――主要包含一些辅助流式部分的类,如:File类;
   3.其他类--文件读取部分的与安全相关的类,如:SerializablePermission类.
   主要的类如下:
     1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
     2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
     3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。
     Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。为此,JAVA中引入了处理字符的流。
     4. Reader(文件格式操作):抽象类,基于字符的输入操作。
     5. Writer(文件格式操作):抽象类,基于字符的输出操作。

非流式文件类--File类
    在Java语言的java.io包中,由File类提供了描述文件和目录的操作与管理方法。但File类不是InputStream、OutputStream或Reader、Writer的子类,因为它不负责数据的输入输出,而专门用来管理磁盘文件与目录。
作用:File类主要用于命名文件、查询文件属性和处理文件目录。
File类共提供了三个不同的构造函数,以不同的参数形式灵活地接收文件和目录名信息。构造函数:
1)File (String   pathname)   
2)File (String  parent  ,  String child)
3)File (File    parent  , String child)
        一个对应于某磁盘文件或目录的File对象一经创建, 就可以通过调用它的方法来获得文件或目录的属性:   
       1)publicboolean exists( ) 判断文件或目录是否存在
      2)publicboolean isFile( ) 判断是文件还是目录
       3)publicboolean isDirectory( ) 判断是文件还是目录
      4)publicString getName( ) 返回文件名或目录名
      5)publicString getPath( ) 返回文件或目录的路径。
      6)publiclong length( ) 获取文件的长度
       7)publicString[ ] list ( ) 将目录中所有文件名保存在字符串数组中返回。
       File类中还定义了一些对文件或目录进行管理、操作的方法,常用的方法有:
      1) public boolean renameTo(File newFile );   重命名文件
      2) public void delete( );   删除文件
      3)  public boolean mkdir( ); 创建目录

Java.IO流类库
1.io流的四个基本类
      java.io包中包含了流式I/O所需要的所有类。在java.io包中有四个基本类:InputStream、OutputStream及Reader、Writer类,它们分别处理字节流和字符流:
    在java.io包中, java.io.InputStream 表示字节输入流, java.io.OutputStream表示字节输出流,处于java.io包最顶层。这两个类均为抽象类,也就是说它们不能被实例化,必须生成子类之后才能实现一定的功能。
2.io的包装类
1.缓冲流(buffer)高效流
2.转换流 InputStringRester与OutputStringWriter;解决编码问题
3.序列化流ObjectInputString与ObjectOutputStream;将对象序列化,反序列化
4.打印流 PrintStream 对输出流的封装

   





回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马