java输入输出流
父类 子类
--->System.in(实例类)
InputStream(抽象类,所有输入流的父类)|
--->FileInputStream
---->System.out(实例类)
OutpustStream(抽象类,所有输出流的父类)|
----> FileOutputStream
---->OutputStreamWriter 非文件流输出
Writer(抽象类)----------- |
---->FilerWriter 文件流输出
----->InputStreamReader 非文件流读入
Reader(抽象类)----实现 |
----->FileReader 文件流读入
buffer类
BufferedReader 用来包装Reader类,如FileReader和InputSreamReader
BufferedWriter 用来包装Writer类,如FileWriter和OutputStreamWriter
--->包装InputStreamReader
BufferedReader|
--->包装FileReader
--->包装OutputStramWriter
BufferedWriter|
--->包装FileWriter
---->包装InputStream
BufferedInputStream|
---->包装FileInputStream
---->包装OutputStream
BufferedOutputStream|
---->包装FileOutputStream
当不明白输入或输出流该如何创建,以下思路
- 是否使用buffer缓存机制 包装/不包装
- 输入?输出 Input/Output Reader/Writer
- 文件还是非文件 FileInputStream/InputStream :FileReader/OutputStreamReader
- 使用Writer/Reader字符处理还是OutputStram/InputStream直接处理 :InputStreamWriter/System.out
如非buffer机制输出非文件字符处理是:
OutputStreamWriter
对应的buffer处理的是:
BufferedWriter bf=new BuffererdWriter(OutPutStreamWriter(System.out));
buffer处理只是在输入/输出流外加一层壳
BufferedReader
- String readLine()
读一行
2.int read()
读一个字符
3.int read(char[] arr)
读满字符数组
4.int read(char[] arr,int off,int length)
从数组off下标开始读入,读取length长度
BufferedWriter
- newLine()
创建一行
StreamTokenizer
StreamToknizer在读取数据有分类机制
- 预定义的 Token 类型常量
StreamTokenizer 提供了以下静态常量,表示常见的 Token 类型:
| 常量名 | 值 | 说明 |
|---|---|---|
| TT_EOF | -1 | 文件结束(End Of File),表示输入流已读完。 |
| TT_EOL | 10 | 行结束符(End Of Line),通常是 \n(换行符)。 |
| TT_NUMBER | -2 | 数字,此时 nval 字段存储数值,sval 为 null。 |
| TT_WORD | -3 | 单词(字符串),此时 sval 字段存储字符串,nval 无意义。 |
| TT_NOTHING | -4 | 未初始化状态(仅在内部使用,通常不会遇到)。 |
- ordinaryChars(char a,char b)
功能是将ascill码从a到b作为未标记字符,标记后的字符没有如何类型ttype(nextToken遇到未标记字符,会停止读取,返回其ascill码)- wordChars(char a,char b)
将ascill码从a到b作为普通字符处理- resetSyntax()
所有字符设置为ordinary,重置这个tokenizer的语法表,使所有的字符都是“普通的”。- parseNumbers()
st.parseNumbers() 是 StreamTokenizer 类中的一个方法,用于启用数字解析功能。它的作用是将连续的数字字符('0'-'9')自动合并为一个 TT_NUMBER 类型的标记(token),通常用于恢复ordinaryChar('0','9');- whitesapceChars(int a,int b)
将ascill码从a到b的字符会忽视,默认将空格和换行符跳过,每次遇到该字符会终止此次读取,下次继续读取时会默认跳过开头这些字符- int nextToken()
遇到非标记字符时,返回该字符的ascil码,若此次读取了一些内容,则返回ttype表示此次读取的数据类型如number和string分别存储在nval和sval
如果想读取long类型,由于nval存储double类型,long类型会精度丢失,所以可以先使用字符读取,再使用Long.parseLong()
st.ordinary('0','9');
st.wordChars('0','9')
st.nextToken();
Long res=Long.paseLong(st.sval);
浙公网安备 33010602011771号