Java InputStream和Reader

1. 字节流和字符流的区别:

  字节流操作的数据单元是8位的字节,而字符流操作的数据单元是16位的字符。

2. 节点流和处理流的区别:

  可以从/向一个特定的IO设备(如磁盘、网络)读、写数据的流,称为节点流,也被称为低级流。

  处理流则用于对一个已经存在的流进行连接或封装,通过封装后的流实现数据读写功能。

3. InputStream 和 Reader

  InputStream 和 Reader 是所有输入流的抽象基类,本身不能创建实例或执行输入,但成为所有输入流的模板,它们的方法是所有输入流都可使用的方法。

  InputStream包含如下方法:

//从输入流种读取单个字节,返回所读取的字节数据
int read();
//从输入流种最多读取b.length个字节的数据,并存储在字节数组b种,返回实际读取的字节数
int read(byte b[]);
//从输入流中最多读取len个字符的数据,并将其存储在字符数组buff中,并不是从数组起点开始,而是从off位置开始
int read(byte b[], int off, int len)

  Reader包含如下方法:

//从输入流中读取单个字符,返回所读取的字符数据
int read();
//从输入流中最多读取cbuf.length个字符数据,并存储在cbuf中,返回实际读取的字符数
int read(char cbuf[]);
//从输入流中最多读取cbuf.length个字符数据,并存储在cbuf中,从off开始存储,返回实际读取的字符数
int read(char cbuf[], int off, int len);

  InputStream和Reader是抽象基类,本身不能创建实例,但它们分别有一个用于读取文件的输入流: FileInputStream, FileReader

public class FileInputStreamTest {
    public static void main(String[] args) {
        InputStream fis = null;
        try {
            fis = new FileInputStream("D:/rding/testfile2/file.txt");
            byte[] bbuf = new byte[1024];
            int hasRead = 0;
            while ((hasRead = fis.read(bbuf)) > 0) {
                System.out.println(new String(bbuf, 0, hasRead));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
public class FileReaderTest {
    public static void main(String[] args) {
        Reader fr = null;
        try {
            fr = new FileReader("D:/rding/testfile2/file.txt");
            char[] cbuf = new char[32];
            int hasRead = 0;
            while ((hasRead = fr.read(cbuf)) > 0) {
                System.out.print(new String(cbuf, 0, hasRead));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fr != null) {
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

  

    

    

  

时间: 2024-10-07 15:41:37

Java InputStream和Reader的相关文章

InputStream和Reader

java.io下面有两个抽象类:InputStream和ReaderInputStream是表示字节输入流的所有类的超类Reader是用于读取字符流的抽象类InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别.即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组.弄清了两个超类的根本区别,再来看他们底下子类的使用,这里只对最常用的几个说明 InputStream    | __FileInputStre

InputStream和Reader的区别(转载)

InputStream和Reader的区别     java.io下面有两个抽象类:InputStream和Reader InputStream是表示字节输入流的所有类的超类 Reader是用于读取字符流的抽象类 InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别. 即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组. 弄清了两个超类的根本区别,再来看他们底下子类的使用,这里只对最常用的几个说明 I

Java InputStream读取网络响应Response数据的方法!(重要)

原文:Java InputStream读取网络响应Response数据的方法!(重要) Java InputStream读取数据问题 ====================================================================== 原理讲解 1. 关于InputStream.read() 在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低.     更好的方法是用Inp

分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要)

原文:分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要) Java InputStream读取数据问题 ====================================================================== 原理讲解 1. 关于InputStream.read()      在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读

java InputStream读取数据问题(转)

java InputStream读取数据问题 1. 关于InputStream.read()     在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低.     更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,一次读取多个字节. 2. 关于InputStream类的available()方法    要

java的inputstream, outputstream, reader和writer的比较

java的文件读写有多种方式,在此通过代码做以下比较. 比较一:FileWriter和FileReader public class MyCode1 { public static void main(String[] args) throws IOException { File f = new File("my.txt"); FileWriter fw = new FileWriter(f); fw.write("HELLO"); fw.close(); Fil

String 、InputStream、Reader 的转换

1.String –> InputStream InputStrem is = new ByteArrayInputStream(str.getBytes());orByteArrayInputStream stream= new ByteArrayInputStream(str.getBytes()); 2.InputStream–>String inputStream input; StringBuffer out = new StringBuffer();     byte[] b =

【转载】java InputStream读取数据问题

原文链接:http://www.cnblogs.com/MyFavorite/archive/2010/10/19/1855758.html 1. 关于InputStream.read()     在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低.     更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方

java InputStream读取数据问题

原文 1. 关于InputStream.read()     在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每次只读取读取一个字节,效率会非常低.     更好的方法是用InputStream.read(byte[] b)或者InputStream.read(byte[] b,int off,int len)方法,一次读取多个字节. 2. 关于InputStream类的available()方法    要一次读取多个字节时,经常用到InputS