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

当不明白输入或输出流该如何创建,以下思路

  1. 是否使用buffer缓存机制 包装/不包装
  2. 输入?输出 Input/Output Reader/Writer
  3. 文件还是非文件 FileInputStream/InputStream :FileReader/OutputStreamReader
  4. 使用Writer/Reader字符处理还是OutputStram/InputStream直接处理 :InputStreamWriter/System.out

如非buffer机制输出非文件字符处理是:
OutputStreamWriter
对应的buffer处理的是:
BufferedWriter bf=new BuffererdWriter(OutPutStreamWriter(System.out));
buffer处理只是在输入/输出流外加一层壳

BufferedReader

  1. String readLine()
    读一行
    2.int read()
    读一个字符
    3.int read(char[] arr)
    读满字符数组
    4.int read(char[] arr,int off,int length)
    从数组off下标开始读入,读取length长度

BufferedWriter

  1. newLine()
    创建一行

StreamTokenizer

StreamToknizer在读取数据有分类机制

  1. 预定义的 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 未初始化状态(仅在内部使用,通常不会遇到)。
  1. ordinaryChars(char a,char b)
    功能是将ascill码从a到b作为未标记字符,标记后的字符没有如何类型ttype(nextToken遇到未标记字符,会停止读取,返回其ascill码)
  2. wordChars(char a,char b)
    将ascill码从a到b作为普通字符处理
  3. resetSyntax()
    所有字符设置为ordinary,重置这个tokenizer的语法表,使所有的字符都是“普通的”。
  4. parseNumbers()
    st.parseNumbers() 是 StreamTokenizer 类中的一个方法,用于启用数字解析功能。它的作用是将连续的数字字符('0'-'9')自动合并为一个 TT_NUMBER 类型的标记(token),通常用于恢复ordinaryChar('0','9');
  5. whitesapceChars(int a,int b)
    将ascill码从a到b的字符会忽视,默认将空格和换行符跳过,每次遇到该字符会终止此次读取,下次继续读取时会默认跳过开头这些字符
  6. 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);

posted on 2025-11-13 13:57  蟒蛇配咖啡  阅读(5)  评论(0)    收藏  举报

导航