Java 输入输出流

来源:互联网 发布:联合国合法席位知乎 编辑:程序博客网 时间:2024/05/22 05:18

1.在Java中如何读写数据?什么是数据流(stream)?

你必须使用Java I/O 类创建一个对象然后调用类中的方法来读写数据。一个Java  I/O对象叫做数据流。读取数据的对象叫做输入流,写入数据的对象叫做输出流。

2.在Java中,字符是如何在内存中表示的,是如何在文本文件中表示的?

在内存中用Unicode编码来表示字符,在文本文件中用一种指定的编码方案来表示字符,如果没有指定编码方案,就用系统默认的编码方案。

3.文本输入流read()方法的返回值是什么?这就是它在文本文件中存储的值吗?

read()方法返回的是字符的统一码,存储在文本文件中的实际值可能不是统一码,

注:Java程序使用的是统一码(Unicode).从FileReader流中读入一个字符时,返回该字符的同一码。字符在文件中的编码可能不是统一码,Java自动地将它转化为统一码。向FileWriter流中写入流中写入字符时,Java自动地将统一码转化为文件制定的编码。也就是说Java程序操作的是统一码,而文件中不一定是统一码,所以从文件中读入字符时,要先转化为统一码,往文件写入字符时要先将统一码转化为文件指定的编码方案。

4.如何使用FileReader创建一个输入流?当文件不存在时,将出现什么现象?如何使用FileWriter创建输出流?当文件存在时会出现什么情况?可以给一个已存在的文件添加数据吗?

   有两种方法使用FileReader创建输入流:FileReader(File file)和FileReader(String fileName)

当文件不存在时会抛出ClassNotFoundException

   有四个构造方法用来创建FileWriter对象:

   public FileWriter(File file)

   public FileWriter(Sting fileName)

   public FileWriter(File file,boolean append)

   public FileWriter(String fileName,boolean append)

如果文件不存在将会创建一个新文件,如果文件已经存在,则前两个构造方法将会删除文件的现有内容。要想保留当前的文件内容并追加新的数据,使用后面两个构造方法并把它们的参数append设为ture.

5.在Java IO程序中,为什么必须在方法中声明抛出异常IOException,或者在try-catch块中处理该异常?

Java I/O 类中除了PrintWriter和PrintStream之外所有的方法和构造器都会抛出IOException,因为它们通常会发生不期望的状况。                                  

6.在FileWriter对象上使用write("91")方法,写到文件中的是什么?

        这个方法是往文件中写入字符串,根据文件中指定的编码方案将字符'9'和'1' 进行转换。

7.为什么总是要求关闭数据流?

      有两个原因:一.关闭流确保数据将会被写入到文件中

                  二.关闭流可以释放数据流对象所要求的资源

8.使用BufferedReader类和BufferedWriter类的好处?

          BufferedReader类和BufferedWriter类通过减少读写次数来加快输入输出的速度。缓存区数据流使用一个类似高速缓存器作用的字符数组。输入时,数组成块地把字符读入缓冲区,然后再从缓存区读取单个字符。输出时,数组累积字符组织成块,然后再整块写入到输出数据流中。

          如果没有指定缓存区的大小,默认大小是8192个字符。缓存区输入流在每次读操作中把尽可能多的数据读入到缓存区。相反,缓存区输出流只有当它的缓存区已满或调用flush()方法时才调用写入文件的方法。

9.什么时候应该使用PrintWriter和PrintStream?如何创建一个PrintWriter对象?System.in、 System.out、System.err使用什么类型的数据?调用System.out.prinltn()时,为什么不必将它放入try-catch方法中?

      PrintWriter类和PrintStream类可以将对象、字符串和数值以文本的方式输出。数值、字符或布尔值转换成字符串并打印到输出流。打印一个对象就是打印该对象调用toString() 返回描述字符串。

      System.in,System.out,System.err的类型是PrintStream,PrintWriter和PrintStream不会抛出IOException,所以调用System.out.println()方法时,不必将它放入try-catch块

10.字节流和字符流的区别是什么?

        字节流从文件中读入字节然后直接将它复制到内存中不需要任何的转换,相反,字符流要求编码和反编码。Java虚拟机将一个统一码转换为文件指定的编码当写入一个字符时,当读入一个字符时将文件中指定的编码转换为统一码。

11.InputStream读取字节,为什么read()方法返回int值而不是字节?InputStream和OutPutStream中的抽象方法有哪些?

        read()方法返回的是0到255范围内的int字节数。

        InputStream的抽象方法只有read()

        OutputStream的抽象方法只有write(int b)

12.FileInputStream类和FileOutputStream类引进了哪些新方法?如何创建FileInputStream和FileOutputStream对象?

       

FileInputStream/FileOutputStream中所有的方法都是从InputStream/OutPutStream中继承的。

创建一个FileInputStream对象可以这样:

public FileInputStream(File file)

public FileInputStream(String name)

创建一个FileOutputStream对象可以这样:

public FileOutputStream(File file)

public FileOutputStream(String name)

public FileOutputStream(File file,boolean append)

public FIleOutputStream(String name,boolean append)

10.在FileOutputStream中调用writeByte(91)方法后,写入文件的是什么?

       91表示的1个字节数,用十六制表示是0x5B,用二进制表示就是01011011 

13.在二进制输入流(FileInputStream和DataInputStream)中,如何判断是否已经达到文件尾?

       如果没有字节可读则表示达到文件尾,我们使用available()方法来判断,当

stream.available()= = 0则表示达到了文件尾

 

整体把握:

I/O分为两大类:文本输入输出和二进制输入输出

文本输入输出:

 


文本文件和二进制文件

在文本中存储的数据是以人能读懂的方式表示的,而二进制文件中存储的数据是用二进制形式来表示的。人读不懂二进制文件,它们是为程序读取而设计的。例如,Java源程序存储在文本文件中,可以使用文本编辑器阅读,但是Java的类存储在二进制文件中,使用Java虚拟机阅读。

 


原创粉丝点击