今天用一上午的时间看了java流的一些基本知识点。因为在java中流的使用非常高。现在我就输入和输出流谈谈自己对流的认识。
Java的输入输出流来源于stream(数据流)。其中流分字节流和字符流。而字节和字符流都有输出个输入和输出流。他们分别是这四个接口。
InputStream(字节输入) outputStream(字节输出) reader(字符输入) writer(字符输出)其中四个接口可以派生出不同功能的类。其中输出流有write()方法的三种重载。输入流有read()的三种重载。
一般就介绍几个常用的几个输入输出类:
Fileinputstream bufferedinputstream fileoutstream bufferedoutputstream
fileReader bufferedreader filewriter bufferedwriter
其中buffered的是一种缓冲流,是对流的封装,使用buffered可以提高输出输入的效率。
现在我想用输入和输出流的列子来更好的说明。
//利用字节流向一个文件写数据
File file = new File("d:\\fish.txt");
file.createNewFile();//先创建一个文件
OutputStream outputStream = new FileOutputStream(file);//创建一个输出流
String s = "我叫飞鱼";//写入数据
outputStream.write(s.getBytes());//将数据写入留中
outputStream.close();//关闭流
介绍一个提高效率的写法
Filefile = new File("d:\\fish.txt");
file.createNewFile();
OutputStream outputStream = new FileOutputStream(file);
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(outputStream);
String s = "我叫飞鱼";
bufferedOutputStream.write(s.getBytes());
bufferedOutputStream.close();
两个实现的功能是一样的。但是BufferedOutputStream是一种缓冲技术流。可以将数据创建于缓冲数组中。这样可以提高效率。下面关于输入输出流我都将用包装bufferedstream方法来封装实现。
//对一个文件的内容进行读取到控制台
InputStreaminputStream=new FileInputStream(new File("d:\\fish.txt"));
BufferedInputStream bufferedInputStream=new BufferedInputStream(inputStream);
byte b= (byte)bufferedInputStream.read();
while(b!=-1){
System.out.print((char)b);
b=(byte) bufferedInputStream.read();
}
bufferedInputStream.close();
对于这个你一定会出现一个问题那就是汉字会出现乱码。因为汉字占两个字节,而每次只是输出一个字节即半个汉字,自然出乱码。
//所以下面介绍一种利用字符流进行对文件的读取。
BufferedReader bufferedReader =new BufferedReader(new FileReader(new File("d:\\fish.txt")));
String s= bufferedReader.readLine();
while(s!=null){
System.out.println(s);
s=bufferedReader.readLine();
}
bufferedReader.close();
现在的代码是不是简练多了。对于java的输入输出流本身就是采用了一种装饰者的设计模式。所以第一句这样写就简练多了。
而字符流读取每次是读取一行。所以是readline();当然你不闲麻烦也可以read()的。
/
/利用字符流对文件进行写内容
BufferedWriterbufferedWriter =new BufferedWriter(new FileWriter(new File("d:\\fish.txt")));
String s="我是飞鱼";
bufferedWriter.write(s);
bufferedWriter.close();
通过这些例子我感觉我觉得已经说的比较清楚了,当然需要一点对java基础知识的人看。
//现在我感觉大概差不多,就做一个从一个文件复制到另个文件的练习。我就用字符流做吧。
public static void main(String[] args) throwsException {
BufferedReader bufferedReader = new BufferedReader(new FileReader(
new File("d:\\fish.txt")));
String s = bufferedReader.readLine();
File file = new File("d:\\fishcopy.txt");
file.createNewFile();// 建立一个文件用来存放文件内容
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
while (s != null) {
bufferedWriter.write(s + "\n");
s = bufferedReader.readLine();
}
bufferedReader.close();
bufferedWriter.close();
}
//上述例子都可在eclispe下调通。但是都抛出异常。
说了那么多,给该说说字符流和字节流的区别了。
我想说一句话就是字节流比字符流要好。但是字符流读取方便,可以写到缓冲区效率高。
但是字节流应用广,像视频图片音频都是用字节流的。所以用字节流不会失真。
还有使用流以后记得要关闭流。