字节流字符流中
Posted hackerfire
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字节流字符流中相关的知识,希望对你有一定的参考价值。
- 字节流的读取
字节流主要是由字节组成,字符流是由字符组成,Java中字符由两个字节组成,字节流是最基本的,换句话说,字节流是字符流的底层!所有的InputStream和OutputStream的子类都是用于处理二进制数据,。
- InputStream抽象类
此抽象类表示字节流的所有类的超类
常用方法:
abstract int read();___从输入流中读取到数据的下一个字节。
int read(byte [ ] b );___从输出流中读取一定数量的字节,并将其存入缓冲区数组 b 中。
int read(byte [ ] b,int off,int len);___从数据流中最多len个数据字节读入byte数组中。
void close();___关闭该资源、否则会一直被占用。
FileStream 子类
直接插在文件上,直接读取文件数据!
创建对象:
FileInputStream(File file)
通过打开一个实际的文件链接来创建一个FileInputStream,该文件通过文件系统中的File 对象 file指定的。
FileInputStream(String path)
通过打开一个实际文件的链接来创建一个FileInputStream,该文件通过系统文件中的路径名path指定的。
BufferedInputStream 子类
BufferedInputStream 为另一个输入流添加一些功能、即缓冲区输入以及支持mark和reset 方法的能力、在创建BufferedInputStream时、会创建一个内部的缓冲区数组(默认8k大小)在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。
创建对象
BufferedInputStream (InputStream in)
创建一个BufferedInputStream并保存其参数、即输入流in ,便于将来使用。
字符流的读取
常用于处理纯文本文件的数据
Reader 抽象类
用于读取字符流的抽象类
常用的方法
int read()
读取单个字符。
int read(char[] cbuf)
将字符读入数组。
abstract int read(char[] cbuf, int off, int len)
将字符读入数组的某一部分。
int read(CharBuffer target)
试图将字符读入指定的字符缓冲区。
abstract void close()
关闭该流并释放与之关联的所有资源。
FileReader 子类
用来读取字符文件便捷类、它的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的、要自己指定这些值、可以 先在FileInputStream上构造一个InputStreamReader。
创建对象
FileReader(String fileName)
在给定从中读取数据的文件名的情况下创建一个新的FileReader。
FileReader(File file)
给定从中读取数据的File 情况下新建一个FileReader。
BufferedReader 子类
可以从字符流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小、或者可以使用默认的大小、大多情况下默认值就足够大了!
创建对象
BufferedReader(Reader in)
创建一个使用默认大小输入缓冲区的缓冲字符输入流。
InputStreamReader子类
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
创建对象
InputStreamReader(InputStream in, String charsetName)
创建使用指定字符集的 InputStreamReader。
InputStreamReader(InputStream in)
创建一个使用默认字符集的 InputStreamReader。
---------------------------下面看看代码的使用-------------------------字节流读取文件
//测试数据的读取:使用字节流 public class Test4_In { public static void main(String[] args) { // method();//字节流单字节读取过程 method2();//字节流高效读取 } //字节流高效读取 private static void method2() { try { //1,创建高效读取对象 InputStream in = new BufferedInputStream(new FileInputStream("D:\附件1--人事面试题30问.doc")); //2,开始读取 // System.out.println(in.read()); // System.out.println(in.read()); // System.out.println(in.read()); // System.out.println(in.read()); long start = System.currentTimeMillis(); int b ;//定义变量,记录读取到的数据 while( ( b = in.read() ) != -1 ) { // System.out.println(b); } start = System.currentTimeMillis()-start; System.out.println(start+"=====2");//3ms //3,释放资源 in.close(); } catch (Exception e) { e.printStackTrace(); } } //字节流读取过程 public static void method() { try { //1,创建字节流读取对象 InputStream in = new FileInputStream(new File("D:\附件1.doc")); InputStream in2 = new FileInputStream("D:\附件1.doc"); //2,开始读取数据 // System.out.println(in.read()); // System.out.println(in.read()); // System.out.println(in.read()); // System.out.println(in.read());//-1 // System.out.println(in.read());//-1 // System.out.println(in.read());//-1 //循环结构:重复的读取数据 long start = System.currentTimeMillis(); int b ;//定义变量,记录读取到的数据 while( ( b = in.read() ) != -1 ) { // System.out.println(b); } start = System.currentTimeMillis()-start; System.out.println(start+"=====1");//115ms //3,释放资源 in.close(); } catch (IOException e) { e.printStackTrace(); } } }
******************* 字符流读取文件 *****************
1 //测试数据的读取:使用字符流 2 3 public class Test5_In2 { 4 5 public static void main(String[] args) { 6 7 method();// 字符流单字符读取 8 9 method2();// 字符流高效读取 10 11 } 12 13 14 15 private static void method2() { 16 17 try { 18 19 // 1,创建高效读取的对象 20 21 Reader in = new BufferedReader(new FileReader("D:\附件1.doc")); 22 23 24 25 // 2,开始读取 26 27 28 29 long time = System.currentTimeMillis(); 30 31 32 33 int b ; 34 35 while( ( b= in.read() ) != -1 ) { 36 37 // System.out.println(b); 38 39 } 40 41 42 43 time = System.currentTimeMillis()-time; 44 45 System.out.println(time+"=========2");//4ms 46 47 48 49 // 3,释放资源 50 51 in.close(); 52 53 54 55 } catch (IOException e) { 56 57 e.printStackTrace(); 58 59 } 60 61 } 62 63 64 65 private static void method() { 66 67 try { 68 69 70 71 // 1,创建字符流对象 72 73 Reader in = new FileReader(new File("D:\附件1--人事面试题30问.doc")); 74 75 Reader in2 = new FileReader("D:\附件1--人事面试题30问.doc"); 76 77 78 79 // 2,开始读取 80 81 // System.out.println(in.read()); 82 83 // System.out.println(in.read()); 84 85 // System.out.println(in.read()); 86 87 // System.out.println(in.read()); 88 89 // System.out.println(in.read()); 90 91 92 93 long time = System.currentTimeMillis(); 94 95 96 97 int b;// 定义变量,记录读取到的数据 98 99 while ((b = in.read()) != -1) { 100 101 // System.out.println(b); 102 103 } 104 105 106 107 time = System.currentTimeMillis()-time; 108 109 System.out.println(time+"=========1");//14ms 110 111 112 113 // 3,释放资源 114 115 in.close(); 116 117 118 119 } catch (Exception e) { 120 121 e.printStackTrace(); 122 123 } 124 125 126 127 } 128 129 130 131 }
********待续........
以上是关于字节流字符流中的主要内容,如果未能解决你的问题,请参考以下文章