java字节流是什么意思?java中的“流”是什么
大家好,今天来为大家分享java字节流是什么意思的一些知识点,和java中的“流”是什么的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
java中的流是什么
流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。
流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,反之我们称为输入流。
可以将流想象成一个“水流管道”,水流就在这管道中形成了,自然就出现了方向的概念。
当程序需要从某个数据源读入数据的时候,就会开启一个输入流,数据源可以是文件、内存或网络等等。相反地,需要写出数据到某个数据源目的地的时候,也会开启一个输出流,这个数据源目的地也可以是文件、内存或网络等等。
可以从不同的角度对流进行分类:
1.处理的数据单位不同,可分为:字符流,字节流
2.数据流方向不同,可分为:输入流,输出流
3.功能不同,可分为:节点流,处理流
1.和 2.都比较好理解,对于根据功能分类的,可以这么理解:
节点流:节点流从一个特定的数据源读写数据。即节点流是直接操作文件,网络等的流,例如FileInputStream和FileOutputStream,他们直接从文件中读取或往文件中写入字节流。
处理流:“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能。过滤流是
使用一个已经存在的输入流或输出流连接创建的,过滤流就是对节点流进行一系列的包装。例如BufferedInputStream和
BufferedOutputStream,使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率,以及DataInputStream和
DataOutputStream,使用已经存在的节点流来构造,提供了读写Java中的基本数据类型的功能。他们都属于过滤流。
来源:
http://www.cnblogs.com/shitouer/archive/2012/12/19/2823641.html
1. Java I/O中字符流和字节流的区别
字节流与和字符流的使用非常相似,但实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
下面以两个写文件的操作为主进行比较,但是在操作时字节流和字符流的操作完成之后都不关闭输出流。
1、使用字节流不关闭执行
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.OutputStream;
publicclassOutputStreamDemo05{
publicstaticvoidmain(String[]args)throwsException{//异常抛出,不处理
//第1步:使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
OutputStreamout=null;
//准备好一个输出的对象
out=newFileOutputStream(f);
//通过对象多态性进行实例化
//第3步:进行写操作
Stringstr="HelloWorld!!!";
//准备一个字符串
byteb[]=str.getBytes();
//字符串转byte数组
out.write(b);
//将内容输出
//第4步:关闭输出流
//out.close();
//此时没有关闭
}
}
打开文件会发现,此时没有关闭字节流操作,但是文件中也依然存在了输出的内容,证明字节流是直接操作文件本身的。而下面继续使用字符流完成,再观察效果。
2、使用字符流不关闭执行
packageorg.lxh.demo12.chariodemo;
importjava.io.File;
importjava.io.FileWriter;
importjava.io.Writer;
publicclassWriterDemo03{
publicstaticvoidmain(String[]args)throwsException{//异常抛出,不处理
//第1步:使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File对象
//第2步:通过子类实例化父类对象
Writerout=null;
//准备好一个输出的对象
out=newFileWriter(f);
//通过对象多态性进行实例化
//第3步:进行写操作
Stringstr="HelloWorld!!!";
//准备一个字符串
out.write(str);
//将内容输出
//第4步:关闭输出流
//out.close();
//此时没有关闭
}
}
程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。
如果想在不关闭时也可以将字符流的内容全部输出,则可以使用Writer类中的flush()方法完成。
importjava.io.File;
importjava.io.FileWriter;
importjava.io.Writer;
publicclassWriterDemo04{
publicstaticvoidmain(String[]args)throwsException{//异常抛出不处理
//第1步:使用File类找到一个文件
Filef=newFile("d:"+File.separator+"test.txt");//声明File
对象
//第2步:通过子类实例化父类对象
Writerout=null;
//准备好一个输出的对象
out=newFileWriter(f);
//通过对象多态性进行实例化
//第3步:进行写操作
Stringstr="HelloWorld!!!";
//准备一个字符串
out.write(str);
//将内容输出
out.flush();
//强制性清空缓冲区中的内容
//第4步:关闭输出流
//out.close();
//此时没有关闭
}
}
此时,文件中已经存在了内容,更进一步证明内容是保存在缓冲区的。这一点在读者日后的开发中要特别引起注意。
java中的“流”是什么
流是个抽象的概念,是对输入输出设备的抽象,java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。
流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,反之我们称为输入流。
可以将流想象成一个“水流管道”,水流就在这管道中形成了,自然就出现了方向的概念。
当程序需要从某个数据源读入数据的时候,就会开启一个输入流,数据源可以是文件、内存或网络等等。相反地,需要写出数据到某个数据源目的地的时候,也会开启一个输出流,这个数据源目的地也可以是文件、内存或网络等等。
可以从不同的角度对流进行分类:
1.
处理的数据单位不同,可分为:字符流,字节流
2.数据流方向不同,可分为:输入流,输出流
3.功能不同,可分为:节点流,处理流
1.
和
2.
都比较好理解,对于根据功能分类的,可以这么理解:
节点流:节点流从一个特定的数据源读写数据。即节点流是直接操作文件,网络等的流,例如fileinputstream和fileoutputstream,他们直接从文件中读取或往文件中写入字节流。
处理流:“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能。过滤流是
使用一个已经存在的输入流或输出流连接创建的,过滤流就是对节点流进行一系列的包装。例如bufferedinputstream和
bufferedoutputstream,使用已经存在的节点流来构造,提供带缓冲的读写,提高了读写的效率,以及datainputstream和
dataoutputstream,使用已经存在的节点流来构造,提供了读写java中的基本数据类型的功能。他们都属于过滤流。
来源:
http://www.cnblogs.com/shitouer/archive/2012/12/19/2823641.html
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!