java 流的分类都有哪些?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 流的分类都有哪些?相关的知识,希望对你有一定的参考价值。
1. 处理的数据单位不同,可分为:字符流,字节流字节流河字符流的区别:(各自在什么情况下使用)
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节, 操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是 音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.
2.数据流方向不同,可分为:输入流,输出流
3.功能不同,可分为:节点流,处理流;
节点流:节点流从一个特定的数据源读写数据。
处理流:“连接”在已存在的流(节点流或处理流)之上通过对数据的处理为程序提供更为强大的读写功能。
看到左上角那个头像没,点一下这里有一群讨论问题的朋友; 参考技术A 按流向分:
输入流: 程序可以从中读取数据的流。
输出流: 程序能向其中写入数据的流。
按数据传输单位分:
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流
按功能分:
节点流: 用于直接操作目标设备的流本回答被提问者采纳
读写文件的基本流都有哪些
Java 的,FileReader FileWriter File FileInputStream这些是吗
一、IO流的三种分类方式1.按流的方向分为:输入流和输出流
2.按流的数据单位不同分为:字节流和字符流
3.按流的功能不同分为:节点流和处理流
二、IO流的四大抽象类:
字符流:Reader Writer
字节流:InputStream(读数据)
OutputStream(写数据)
三、InputStream的基本方法
int read() throws IOException 读取一个字节以整数形式返回,如果返回-1已到输入流的末尾
void close() throws IOException 关闭流释放内存资源
long skip(long n) throws IOException 跳过n个字节不读
四、OutputStream的基本方法
void write(int b) throws IOException 向输出流写入一个字节数据
void flush() throws IOException 将输出流中缓冲的数据全部写出到目的地
五、Writer的基本方法
void write(int c) throws IOException 向输出流写入一个字符数据
void write(String str) throws IOException将一个字符串中的字符写入到输出流
void write(String str,int offset,int length)
将一个字符串从offset开始的length个字符写入到输出流
void flush() throws IOException
将输出流中缓冲的数据全部写出到目的地
六、Reader的基本方法
int read() throws IOException 读取一个字符以整数形式返回,如果返回-1已到输入流的末尾
七、节点流类型
八、访问文件之FileInputStream和FileOutputStream继承基类用于向文件中输入输出字节
九、访问文件之FileReader和FileWriter继承基类用于向文件中输入输出字符
----输出流在构造函数第二个参数可以设置true意义为跟在已有文件后进行输入
----此类流会抛出FileNotFoundException需要对其进行显示捕捉
十、缓冲流:缓冲流要套接在相应的节点流之上,提高了读写的效率。
此处理流的构造方法都得传相对应的基类类型
BufferedReader:提供了readLine方法用于高校读取一行字符串
BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行
BufferedInputStream 没多大用处
BufferedOutputStream 没多大用处
十一、转换流:主要作用将字节流转换成字符流。用处较大!
转换流在构造时可以指定其编码集合
InputStreamReader需要和InputStream套接
OutputStreamWriter需要和OutputStream套接
例:OutputStreamWriter osw = new OutputStreamWriter (new FileOutputStream(文件路径);
方法例:osw.getEncoding(); 获得流的编码方式
十二、数据流与字节数组流:
数据流主要为实现可以存取Java原始数据类型如long,boolean
数据流是字节流
DataInputStream需要和InputStream套接
DataOutputStream需要和OutputStream套接
DataInputStream方法:readBoolean() readInt() read……()……
readUTF():网络传输常用方法 读一个Unicode字符串
DataOutputStream方法与DataInputStream基本对应为写的方法
//此构造函数等于已可以往一个字节数组里输入内容
ByteArrayOutputStream baos = new ByteArrayOutputStream ();
//此方法为获取一个字节数组方法返回字节数组
baos.toByteArray();
//此方法获取字节数组占了多少字节
new ByteArrayInputStream(一个字节数组)。available()
1ByteArrayOutputStream baos =
2 new ByteArrayOutputStream();
3 DataOutputStream dos =
4 new DataOutputStream(baos);
5 try
6 dos.writeDouble(Math.random());
7 dos.writeBoolean(true);
8 ByteArrayInputStream bais =
9 new ByteArrayInputStream(baos.toByteArray());
10 System.out.println(bais.available());
11 DataInputStream dis = new DataInputStream(bais);
12 System.out.println(dis.readDouble());
13 System.out.println(dis.readBoolean());
14 dos.close(); dis.close();
15 catch (IOException e)
16 e.printStackTrace();
17
十二、Print流
Print流只有输出流无输入流,PrintWriter和PrintStream分别针对字符字节
两个类提供了重载的Print和Println方法用于多种数据类型的输出
PrintWriter和PrintStream的输出操作不会抛出异常
PrintWriter和PrintStream有自动flush功能
----System.setOut(接收OutputStream类):用于设置系统默认输出流
十二、Object流
等同于c#序列化,用直接将Object写入或读出
transient关键字为不序列化此成员变量
需要序列化的类必须实现Serializable接口
主要方法:writeObject(Object); readObject();
读出为Object类型需要强转数据类型
1 import java.io.*;
2
3 public class TestObjectIO
4 public static void main(String args[]) throws Exception
5 T t = new T();
6 t.k = 8;
7 FileOutputStream fos = new FileOutputStream("d:/share/java/io/testobjectio.dat");
8 ObjectOutputStream oos = new ObjectOutputStream(fos);
9 oos.writeObject(t);
10 oos.flush();
11 oos.close();
12
13 FileInputStream fis = new FileInputStream("d:/share/java/io/testobjectio.dat");
14 ObjectInputStream ois = new ObjectInputStream(fis);
15 T tReaded = (T)ois.readObject();
16 System.out.println(tReaded.i + " " + tReaded.j + " " + tReaded.d + " " + tReaded.k);
17
18
19
20
21 class T
22 implements Serializable
23
24 int i = 10;
25 int j = 9;
26 double d = 2.3;
27 transient int k = 15;
28
参考资料:http://www.mldn.cn/articleview/2009-3-4/article_view_3031.htm
参考技术A FileReader FileWriter File FileInputStream这些都只是高级流。
还有诸如inputstream bufferedinputstream(带缓冲的)
很多,建议看下java.io.*;包下的源码。
很反感各处乱粘的无知勇士们本回答被提问者采纳 参考技术B FileReader,FileWriter,FileInputStream都是基本流,基本流的定义就是构造方法中可直接对File对象进行注入的流,像BufferedInputStream这些是高级流,只能通过传递其他基本流来创建对象 参考技术C I/O这段基本分为的是两类,一类是字节,一类是字符。凡是Stream这种的都是字节读入,而Reader和Writer都是属于字符。而文件相关的,当然就有FileInputStream,FileReader等等这些了。你可以好好看看相关书籍的I/O章节。就明白了。 参考技术D 按时地方
以上是关于java 流的分类都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章