① java 流的分类有哪些
按流向分:
输入流来: 程序可以从中读取源数据的流。
输出流: 程序能向其中写入数据的流。
按数据传输单位分:
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流
按功能分:
节点流: 用于直接操作目标设备的流
② java输入输出流怎么写,
这个简单,主要就是几个类,本人专业就是JAVA编程,把手教你邮件联系
③ java中的io流有哪些
Java中的IO流
指的是将不同的输入输出源通过流的形式进行输入或输出的操作,流是一种抽象的描述,在程序中指的是数据的一种转移方式。
IO流的分类:
(1)按照数据的流向:
输入流、输出流
(2)按照流数据的格式:
字符流、字节流
(3)按照流数据的包装过程:
节点流(低级流)、处理流(高级流)
最基本的几种进行简单介绍:
•InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
•OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
④ java 输入输出流 (被采纳为答案者加100分)
stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:
(1)字节流
表示以字节为单位从stream中读取或往stream中写入信息,即io包中的inputstream类和outputstream类的派生类。通常用来读取二进制数据,如图象和声音。
(2)字符流
以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。
区别:
Reader和Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位的字节流,因此不可能很好地处理16位的Unicode字符流。Unicode是国际化的字符集(更何况Java内置的char就是16位的Unicode字符),这样加了Reader和Writer之后,所有的I/O就都支持Unicode了。此外新类库的性能也比旧的好。
但是,Read和Write并不是取代InputStream和OutputStream,有时,你还必须同时使用"基于byte的类"和"基于字符的类"。为此,它还提供了两个"适配器(adapter)"类。InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将OutputStream转化成Writer。
一.流的层次结构
定义:
(1) java将读取数据对象成为输入流,能向其写入的对象叫输出流。
二.InputStream类
inputstream类和outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。
InputStream是输入字节数据用的类,所以InputStream类提供了3种重载的read方法.Inputstream类中的常用方法:
(1) public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。
(2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的
(3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
(4) public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,
(5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取
(6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.
三.OutputStream类
OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。
1. public void write(byte b[ ]):将参数b中的字节写到输出流。
2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。
3. public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。
4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。
5. public void close( ) : 关闭输出流并释放与流相关的系统资源。
注意:
1. 上述各方法都有可能引起异常。
2. InputStream和OutputStream都是抽象类,不能创建这种类型的对象。
四.FileInputStream类
FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。使用方法:
方式1:
File fin=new File("d:/abc.txt");
FileInputStream in=new FileInputStream(fin);
方式2:
FileInputStream in=new
FileInputStream("d: /abc.txt");
方式3:
构造函数将 FileDescriptor()对象作为其参数。
FileDescriptor() fd=new FileDescriptor();
FileInputStream f2=new FileInputStream(fd);
五.FileOutputStream类
FileOutputStream类用来处理以文件作为数据输出目的数据流;一个表示文件名的字符串,也可以是File或FileDescriptor对象。
创建一个文件流对象有两种方法:
方式1:
File f=new File("d:/abc.txt");
FileOutputStream out=new FileOutputStream (f);
方式2:
FileOutputStream out=new
FileOutputStream("d:/abc.txt");
方式3:构造函数将 FileDescriptor()对象作为其参数。
FileDescriptor() fd=new FileDescriptor();
FileOutputStream f2=new FileOutputStream(fd);
方式4:构造函数将文件名作为其第一参数,将布尔值作为第二参数。
FileOutputStream f=new FileOutputStream("d:/abc.txt",true);
注意:
(1)文件中写数据时,若文件已经存在,则覆盖存在的文件;(2)的读/写操作结束时,应调用close方法关闭流。
举例:2-1
六.File类
File类与InputStream / OutputStream类同属于一个包,它不允许访问文件内容。
File类主要用于命名文件、查询文件属性和处理文件目录。
举例:2-2
七.从一个流构造另一个流
java的流类提供了结构化方法,如,底层流和高层过滤流。
而高层流不是从输入设备读取,而是从其他流读取。同样高层输出流也不是写入输出设备,而是写入其他流。
使用"分层对象(layered objects)",为单个对象动态地,透明地添加功能的做法,被称为Decorator Pattern。Decorator模式要求所有包覆在原始对象之外的对象,都必须具有与之完全相同的接口。这使得decorator的用法变得非常的透明--无论对象是否被decorate过,传给它的消息总是相同的。这也是Java I/O类库要有"filter(过滤器)"类的原因:抽象的"filter"类是所有decorator的基类。Decorator模式常用于如下的情形:如果用继承来解决各种需求的话,类的数量会多到不切实际的地步。Java的I/O类库需要提供很多功能的组合,于是decorator模式就有了用武之地。
为InputStream和OutputStream定义decorator类接口的类,分别是FilterInputStream和FilterOutputStream。
7.1 FilterInputStream
.......
具体去这里看看把,有很详细的介绍。希望对你有帮助。
⑤ Java涓鏈夊嚑绉嶇被鍨嬬殑娴
鍦↗ava.io鍖呬腑杩樻湁璁稿氬叾浠栫殑娴侊紝涓昏佹槸涓轰簡鎻愰珮鎬ц兘鍜屼娇鐢ㄦ柟渚裤侰/C++鍙鑳芥彁渚涘瓧鑺傛祦銆侸ava涓鐨勬祦鍒嗕负涓ょ嶏紝涓绉嶆槸瀛楄妭娴侊紝鍙︿竴绉嶆槸瀛楃︽祦锛屽垎鍒鐢卞洓涓鎶借薄绫绘潵琛ㄧず锛堟瘡绉嶆祦鍖呮嫭杈撳叆鍜岃緭鍑轰袱绉嶆墍浠ヤ竴鍏卞洓涓锛:InputStream锛孫utputStream锛孯eader锛學riter銆侸ava涓鍏朵粬澶氱嶅氭牱鍙樺寲鐨勬祦鍧囨槸鐢卞畠浠娲剧敓鍑烘潵鐨.
瀛楃︽祦鍜屽瓧鑺傛祦鏄鏍规嵁澶勭悊鏁版嵁鐨勪笉鍚屾潵鍖哄垎鐨勩傚瓧鑺傛祦鎸夌収8浣嶄紶杈擄紝瀛楄妭娴佹槸鏈鍩烘湰鐨勶紝鎵鏈夋枃浠剁殑鍌ㄥ瓨鏄閮芥槸瀛楄妭锛坆yte锛夌殑鍌ㄥ瓨锛屽湪纾佺洏涓婁繚鐣欑殑骞朵笉鏄鏂囦欢鐨勫瓧绗﹁屾槸鍏堟妸瀛楃︾紪鐮佹垚瀛楄妭锛屽啀鍌ㄥ瓨杩欎簺瀛楄妭鍒扮佺洏銆
1.瀛楄妭娴佸彲鐢ㄤ簬浠讳綍绫诲瀷鐨勫硅薄锛屽寘鎷浜岃繘鍒跺硅薄锛岃屽瓧绗︽祦鍙鑳藉勭悊瀛楃︽垨鑰呭瓧绗︿覆锛
2. 瀛楄妭娴佹彁渚涗簡澶勭悊浠讳綍绫诲瀷鐨処O鎿嶄綔鐨勫姛鑳斤紝浣嗗畠涓嶈兘鐩存帴澶勭悊Unicode瀛楃︼紝鑰屽瓧绗︽祦灏卞彲浠ャ
璇绘枃鏈鐨勬椂鍊欑敤瀛楃︽祦锛屼緥濡倀xt鏂囦欢銆傝婚潪鏂囨湰鏂囦欢鐨勬椂鍊欑敤瀛楄妭娴侊紝渚嬪俶p3銆傜悊璁轰笂浠讳綍鏂囦欢閮借兘澶熺敤瀛楄妭娴佽诲彇锛屼絾褰撹诲彇鐨勬槸鏂囨湰鏁版嵁鏃讹紝涓轰簡鑳借繕鍘熸垚鏂囨湰浣犲繀椤诲啀缁忚繃涓涓杞鎹㈢殑宸ュ簭锛岀浉瀵规潵璇村瓧绗︽祦灏辩渷浜嗚繖涓楹荤儲锛屽彲浠ユ湁鏂规硶鐩存帴璇诲彇銆
瀛楃︽祦澶勭悊鐨勫崟鍏冧负2涓瀛楄妭鐨刄nicode瀛楃︼紝鍒嗗埆鎿嶄綔瀛楃︺佸瓧绗︽暟缁勬垨瀛楃︿覆锛岃屽瓧鑺傛祦澶勭悊鍗曞厓涓1涓瀛楄妭锛 鎿嶄綔瀛楄妭鍜屽瓧鑺傛暟缁勩傛墍浠ュ瓧绗︽祦鏄鐢盝ava铏氭嫙鏈哄皢瀛楄妭杞鍖栦负2涓瀛楄妭鐨刄nicode瀛楃︿负鍗曚綅鐨勫瓧绗﹁屾垚鐨勶紝鎵浠ュ畠瀵瑰氬浗璇瑷鏀鎸佹ф瘮杈冨ソ锛
1锛庡瓧鑺傛祦锛氱户鎵夸簬InputStream \ OutputStream銆
OutputStream鎻愪緵鐨勬柟娉曪細
void write(int b):鍐欏叆涓涓瀛楄妭鐨勬暟鎹
void write(byte[] buffer):灏嗘暟缁刡uffer鐨勬暟鎹鍐欏叆娴
void write(byte[] buffer,int offset,int len):浠巄uffer[offset]寮濮嬶紝鍐欏叆len涓瀛楄妭鐨勬暟鎹
void flush():寮哄埗灏哹uffer鍐呯殑鏁版嵁鍐欏叆娴
void close():鍏抽棴娴
InputStream鎻愪緵鐨勬柟娉曪細
int read():璇诲嚭涓涓瀛楄妭鐨勬暟鎹锛屽傛灉宸茶揪鏂囦欢鐨勬湯绔锛岃繑鍥炲间负锛1
int read(byte[] buffer):璇诲嚭buffer澶у皬鐨勬暟鎹锛岃繑鍥炲间负瀹為檯鎵璇诲嚭鐨勫瓧鑺傛暟
int read(byte[] buffer,int offset,int len)
int available():杩斿洖娴佸唴鍙渚涜诲彇鐨勫瓧鑺傛暟鐩
long skip(long n):璺宠繃n涓瀛楄妭鐨勬暟鎹锛岃繑鍥炲间负瀹為檯鎵璺宠繃鐨勬暟鎹鏁
void close():鍏抽棴娴
2锛庡瓧绗︽祦锛岀户鎵夸簬InputStreamReader \ OutputStreamWriter銆
瀛楃︽祦鐨勭被锛1锛夛紝BufferedReader鏄涓绉嶈繃婊ゅ櫒锛坒ilter锛夛紙extends FilterReader锛夈傝繃婊
鍣ㄧ敤鏉ュ皢娴佺殑鏁版嵁鍔犱互澶勭悊鍐嶈緭鍑恒傛瀯閫犲嚱鏁颁负锛
BufferedReader(Reader in):鐢熸垚涓涓缂撳啿鐨勫瓧绗﹁緭鍏ユ祦锛宨n涓轰竴涓璇诲彇鍣
BufferedReader(Reader in,int size):鐢熸垚涓涓缂撳啿鐨勫瓧绗﹁緭鍏ユ祦锛屽苟鎸囧畾缂撳啿鍖虹殑澶у皬涓簊ize
public class IOStreamDemo {
public void samples锛堬級 throws IOException { //1. 杩欐槸浠庨敭鐩樿诲叆涓琛屾暟鎹,杩斿洖鐨勬槸涓涓瀛楃︿覆
BufferedReader stdin =new BufferedReader锛坣ew InputStreamReader锛圫ystem.in锛夛級锛
System.out.print锛"Enter a line:"锛夛紱
System.out.println锛坰tdin.readLine锛堬級锛夛紱
//2. 杩欐槸浠庢枃浠朵腑閫愯岃诲叆鏁版嵁
BufferedReader in = new BufferedReader锛坣ew FileReader锛"IOStreamDemo.java"锛夛級锛
String s, s2 = new String锛堬級锛
while锛堬紙s = in.readLine锛堬級锛!= null锛
s2 += s + "\n"锛
in.close锛堬級锛
//3. 杩欐槸浠庝竴涓瀛楃︿覆涓閫愪釜璇诲叆瀛楄妭
StringReader in1 = new StringReader锛坰2锛夛紱
int c锛
while锛堬紙c = in1.read锛堬級锛 != -1锛
System.out.print锛堬紙char锛塩锛夛紱
//4. 杩欐槸灏嗕竴涓瀛楃︿覆鍐欏叆鏂囦欢
try {
BufferedReader in2 = new BufferedReader锛坣ew StringReader锛坰2锛夛級锛
PrintWriter out1 = new PrintWriter锛坣ew BufferedWriter锛坣ew FileWriter锛"IODemo.out"锛夛級锛夛紱
int lineCount = 1锛
while锛堬紙s = in2.readLine锛堬級锛 != null 锛
out1.println锛坙ineCount++ + ": " + s锛夛紱
out1.close锛堬級锛
} catch锛圗OFException e锛 {
System.err.println锛"End of stream"锛夛紱
}
} }
瀵逛簬涓婇潰鐨勪緥瀛愶紝闇瑕佽存槑鐨勬湁浠ヤ笅鍑犵偣锛
1. InputStreamReader鏄疘nputStream鍜孯eader涔嬮棿鐨勬ˉ姊侊紝鐢变簬System.in鏄瀛楄妭娴侊紝闇瑕佺敤瀹冩潵鍖呰呬箣鍚庡彉涓哄瓧绗︽祦渚涚粰BufferedReader浣跨敤銆
3. PrintWriter out1 = new PrintWriter锛坣ew BufferedWriter锛坣ew FileWriter锛"IODemo.out"锛夛級锛夛紱
杩欏彞璇濅綋鐜颁簡Java杈撳叆杈撳嚭绯荤粺鐨勪竴涓鐗圭偣锛屼负浜嗚揪鍒版煇涓鐩鐨勶紝闇瑕佸寘瑁呭ソ鍑犲眰銆傞栧厛锛岃緭鍑虹洰鐨勫湴鏄鏂囦欢IODemo.out锛屾墍浠ユ渶鍐呭眰鍖呰呯殑鏄疐ileWriter锛屽缓绔嬩竴涓杈撳嚭鏂囦欢娴侊紝鎺ヤ笅鏉ワ紝鎴戜滑甯屾湜杩欎釜娴佹槸缂撳啿鐨勶紝鎵浠ョ敤BufferedWriter鏉ュ寘瑁呭畠浠ヨ揪鍒扮洰鐨勶紝鏈鍚庯紝鎴戜滑闇瑕佹牸寮忓寲杈撳嚭缁撴灉锛屼簬鏄灏哖rintWriter鍖呭湪鏈澶栧眰銆
Java娴佹湁鐫鍙︿竴涓閲嶈佺殑鐢ㄩ旓紝閭e氨鏄鍒╃敤瀵硅薄娴佸瑰硅薄杩涜屽簭鍒楀寲銆
鍦ㄤ竴涓绋嬪簭杩愯岀殑鏃跺欙紝鍏朵腑鐨勫彉閲忔暟鎹鏄淇濆瓨鍦ㄥ唴瀛樹腑鐨勶紝涓鏃︾▼搴忕粨鏉熻繖浜涙暟鎹灏嗕笉浼氳淇濆瓨锛屼竴绉嶈В鍐崇殑鍔炴硶鏄灏嗘暟鎹鍐欏叆鏂囦欢锛岃孞ava涓鎻愪緵浜嗕竴绉嶆満鍒讹紝瀹冨彲浠ュ皢绋嬪簭涓鐨勫硅薄鍐欏叆鏂囦欢锛屼箣鍚庡啀浠庢枃浠朵腑鎶婂硅薄璇诲嚭鏉ラ噸鏂板缓绔嬨傝繖灏辨槸鎵璋撶殑瀵硅薄搴忓垪鍖栥侸ava涓寮曞叆瀹冧富瑕佹槸涓轰簡RMI锛圧emote
Method Invocation锛夊拰Java Bean鎵鐢锛屼笉杩囧湪骞虫椂搴旂敤涓锛屽畠涔熸槸寰堟湁鐢ㄧ殑涓绉嶆妧鏈銆
⑥ JAVA闂棰
澶у氬垵瀛﹁呭筳ava I/O绯荤粺鎻愪緵浜嗗傛ゅ氱殑绫昏屾劅鍒颁笉鐭ユ墍閿欙紝鏈鏂囦腑灏嗕細鍋氫竴涓嬫⒊鐞
娴佺殑姒傚康
娴侊紙stream锛夌殑姒傚康婧愪簬UNIX涓鐨勭¢亾锛坧ipe锛夌殑姒傚康銆傚湪UNIX涓锛岀¢亾鏄涓鏉′笉闂存柇鐨勫瓧鑺傛祦锛岀敤鏉ュ疄鐜扮▼搴忔垨杩涚▼闂寸殑閫氫俊锛屾垨璇诲啓澶栧洿璁惧囥佸栭儴鏂囦欢绛夈
涓涓娴侊紝蹇呮湁婧愮鍜岀洰鐨勭锛屽畠浠鍙浠ユ槸璁$畻鏈哄唴瀛樼殑鏌愪簺鍖哄煙锛屼篃鍙浠ユ槸纾佺洏鏂囦欢锛岀敋鑷冲彲浠ユ槸Internet涓婄殑鏌愪釜URL銆
娴佺殑鏂瑰悜鏄閲嶈佺殑锛屾牴鎹娴佺殑鏂瑰悜锛屾祦鍙浠ュ垎涓轰袱绫伙細杈撳叆娴佸拰杈撳嚭娴併傜敤鎴峰彲浠ヤ粠杈撳叆娴佷腑璇诲彇淇℃伅锛屼絾涓嶈兘鍐欏畠銆傜浉鍙嶏紝瀵硅緭鍑烘祦锛屽彧鑳藉線寰杈撳叆娴佸啓锛岃屼笉鑳借诲彇銆傚叾瀹炶緭鍏/杈撳嚭鏄鎯冲逛簬鍐呭瓨鏉ヨ寸殑銆
瀹為檯涓婏紝娴佺殑婧愮鍜岀洰鐨勭鍙绠鍗曞湴鐪嬫垚鏄瀛楄妭鐨勭敓浜ц呭拰娑堣垂鑰咃紝瀵逛簬杈撳叆娴侊紝鍙涓嶅繀鍏冲績瀹冪殑婧愮鏄浠涔堬紝鍙瑕佺畝鍗曞湴浠庢祦涓璇绘暟鎹锛岃屽硅緭鍑烘祦锛屼篃鍙涓嶇煡閬撳畠鐨勭洰鐨勭锛屽彧鏄绠鍗曞湴寰娴佷腑鍐欐暟鎹銆
java.io鍖呬腑鐨勭被瀵瑰簲涓ょ被娴侊紝涓绫绘祦鐩存帴浠庢寚瀹氱殑浣嶇疆锛堝傜佺洏鏂囦欢鎴栧唴瀛樺尯鍩燂級璇绘垨鍐欙紝杩欑被娴佺О涓虹粨鐐规祦锛屽叾浠栫殑娴佸垯绉颁负杩囨护娴侊紙鍖呰呮祦锛
杩囨护娴侊細涓浜涙祦鍙浠ヤ粠鏂囦欢浠ュ強鍏朵粬鍦版柟鎺ユ敹瀛楄妭锛屽彟涓浜涙祦鍙浠ュ皢瀛楄妭缁勫悎鎴愭洿鏈夌敤鐨勬暟鎹绫诲瀷銆傚皢涓涓宸茬粡瀛樺湪鐨勬祦浼犻掔粰鍙︿竴涓娴佺殑鏋勯犳柟娉曪紝灏嗚繖涓ょ嶆祦缁撳悎璧锋潵锛岀粨鍚堝悗鐨勬祦琚绉颁负杩囨护娴併
杩囨护鍣ㄨ緭鍏ユ祦寰寰鏄浠ュ叾瀹冭緭鍏ユ祦浣滀负瀹冪殑杈撳叆婧愶紝缁忚繃杩囨护鎴栧勭悊鍚庡啀浠ユ柊鐨勮緭鍏ユ祦鐨勫舰寮忔彁渚涚粰鐢ㄦ埛锛岃繃婊ゅ櫒杈撳嚭娴佷篃绫讳技銆
java鐨勫父鐢ㄨ緭鍏ャ佽緭鍑烘祦
鍏跺疄閮芥槸缁ф壙鑷4涓鎶借薄绫伙紝鍒嗗埆鏄
鍩轰簬鍗曞瓧鑺傜殑InputStream,OutputStream绫
鍩轰簬鍙屽瓧鑺傜殑Unicode浠g爜鍗曞厓鐨 Reader锛 Writer绫
涓鏃︽墦寮杈撳叆娴佸悗锛岀▼搴忓氨鍙浠庤緭鍏ユ祦涓茶屽湴璇绘暟鎹銆
浠庤緭鍏ユ祦璇绘暟鎹鐨勮繃绋嬩竴鑸濡備笅锛
open a stream
while more information
read information
close the stream
绫讳技鍦帮紝绋嬪簭涔熻兘閫氳繃鎵撳紑涓涓杈撳嚭娴佸苟椤哄簭鍦板啓鍏ユ暟鎹鏉ュ皢淇℃伅閫佽嚦鐩鐨勭銆
寰杈撳嚭娴佸啓鏁版嵁鐨勮繃绋嬩竴鑸濡備笅锛
open a stream
while more information
write information
close the stream
java.io鍖呬腑鐨剆tream绫绘牴鎹瀹冧滑鎿嶄綔瀵硅薄鐨勭被鍨嬫槸瀛楃﹁繕鏄瀛楄妭鍙鍒嗕负涓ゅぇ绫伙細 瀛楃︽祦鍜屽瓧鑺傛祦銆
InputStream,OutputStream绫讳粎浠呰诲彇鍜屽啓鍏ュ崟涓鐨勫瓧鑺傚拰瀛楄妭鏁扮粍锛屽畠浠娌℃湁璇诲彇鍜屽啓鍏ュ瓧绗︿覆鍜屾暟鍊肩殑鏂规硶銆
鐢变簬浠ュ瓧鑺備负鍗曚綅鐨勬祦澶勭悊瀛樺偍涓篣nicode鐮佺殑淇℃伅寰堜笉鏂逛究锛圲nicode鐨勬瘡涓浠g爜鍗曞厓浣跨敤浜嗕袱涓瀛楄妭锛夛紝鎵浠ユ湁浜嗕竴涓涓撻棬鐨勭被灞傛℃潵澶勭悊Unicode瀛楃︼紝杩欎簺绫荤户鎵夸簬鎶借薄绫籖eader鍜學riter銆
1.1 浠ュ瓧鑺備负瀵煎悜鐨剆tream
浠ュ瓧鑺備负瀵煎悜鐨剆tream锛岃〃绀轰互瀛楄妭涓哄崟浣嶄粠stream涓璇诲彇鎴栧線stream涓鍐欏叆淇℃伅銆備互瀛楄妭涓哄煎悜鐨剆tream鍖呮嫭涓嬮潰鍑犵嶇被鍨嬶細
1銆俰nput stream锛
1) ByteArrayInputStream锛氭妸鍐呭瓨涓鐨勪竴涓缂撳啿鍖轰綔涓篒nputStream浣跨敤
2) StringBufferInputStream锛氭妸涓涓猄tring瀵硅薄浣滀负InputStream ---宸茶繃鏃躲 姝ょ被鏈鑳芥g‘鍦板皢瀛楃﹁浆鎹涓哄瓧鑺傘備粠 JDK 1.1 寮濮嬶紝浠庡瓧绗︿覆鍒涘缓娴佺殑棣栭夋柟娉曟槸閫氳繃 StringReader 绫昏繘琛屽垱寤恒
3) FileInputStream锛氭妸涓涓鏂囦欢浣滀负InputStream锛屽疄鐜板规枃浠剁殑璇诲彇鎿嶄綔
4) PipedInputStream锛氬疄鐜颁簡pipe鐨勬傚康锛屼富瑕佸湪绾跨▼涓浣跨敤
5) SequenceInputStream锛氭妸澶氫釜InputStream鍚堝苟涓轰竴涓狪nputStream
2銆侽ut stream
1) ByteArrayOutputStream锛氭妸淇℃伅瀛樺叆鍐呭瓨涓鐨勪竴涓缂撳啿鍖轰腑
2) FileOutputStream锛氭妸淇℃伅瀛樺叆鏂囦欢涓
3) PipedOutputStream锛氬疄鐜颁簡pipe鐨勬傚康锛屼富瑕佸湪绾跨▼涓浣跨敤
4) SequenceOutputStream锛氭妸澶氫釜OutStream鍚堝苟涓轰竴涓狾utStream
1.2 浠Unicode瀛楃︿负瀵煎悜鐨剆tream
浠Unicode瀛楃︿负瀵煎悜鐨剆tream锛岃〃绀轰互Unicode瀛楃︿负鍗曚綅浠巗tream涓璇诲彇鎴栧線stream涓鍐欏叆淇℃伅銆備互Unicode瀛楃︿负瀵煎悜鐨剆tream鍖呮嫭涓嬮潰鍑犵嶇被鍨嬶細
1)銆侷nput Stream
1) CharArrayReader锛氫笌ByteArrayInputStream瀵瑰簲
2) StringReader锛氫笌StringBufferInputStream瀵瑰簲
3) FileReader锛氫笌FileInputStream瀵瑰簲
4) PipedReader锛氫笌PipedInputStream瀵瑰簲
2銆侽ut Stream
1) CharArrayWrite锛氫笌ByteArrayOutputStream瀵瑰簲
2) StringWrite锛氭棤涓庝箣瀵瑰簲鐨勪互瀛楄妭涓哄煎悜鐨剆tream
3) FileWrite锛氫笌FileOutputStream瀵瑰簲
4) PipedWrite锛氫笌PipedOutputStream瀵瑰簲
浠ュ瓧绗︿负瀵煎悜鐨剆tream鍩烘湰涓婂规湁涓庝箣鐩稿瑰簲鐨勪互瀛楄妭涓哄煎悜鐨剆tream銆備袱涓瀵瑰簲绫诲疄鐜扮殑鍔熻兘鐩稿悓锛屽瓧鏄鍦ㄦ搷浣滄椂鐨勫煎悜涓嶅悓銆傚侰harArrayReader锛氬拰ByteArrayInputStream鐨勪綔鐢ㄩ兘鏄鎶婂唴瀛樹腑鐨勪竴涓缂撳啿鍖轰綔涓篒nputStream浣跨敤锛屾墍涓嶅悓鐨勬槸鍓嶈呮瘡娆′粠鍐呭瓨涓璇诲彇涓涓瀛楄妭鐨勪俊鎭锛岃屽悗鑰呮瘡娆′粠鍐呭瓨涓璇诲彇涓涓瀛楃︺
1.3 涓ょ嶄笉闄愬煎悜鐨剆tream涔嬮棿鐨勮浆鎹
InputStreamReader鍜孫utputStreamReader锛氭妸涓涓浠ュ瓧鑺備负瀵煎悜鐨剆tream杞鎹㈡垚涓涓浠ュ瓧绗︿负瀵煎悜鐨剆tream銆
InputStreamReader 鏄瀛楄妭娴侀氬悜瀛楃︽祦鐨勬ˉ姊侊細瀹冧娇鐢ㄦ寚瀹氱殑 charset 璇诲彇瀛楄妭骞跺皢鍏惰В鐮佷负瀛楃︺傚畠浣跨敤鐨勫瓧绗﹂泦鍙浠ョ敱鍚嶇О鎸囧畾鎴栨樉寮忕粰瀹氾紝鎴栬呭彲浠ユ帴鍙楀钩鍙伴粯璁ょ殑瀛楃﹂泦
OutputStreamWriter 鏄瀛楃︽祦閫氬悜瀛楄妭娴佺殑妗ユ侊細鍙浣跨敤鎸囧畾鐨 charset 灏嗚佸啓鍏ユ祦涓鐨勫瓧绗︾紪鐮佹垚瀛楄妭銆傚畠浣跨敤鐨勫瓧绗﹂泦鍙浠ョ敱鍚嶇О鎸囧畾鎴栨樉寮忕粰瀹氾紝鍚﹀垯灏嗘帴鍙楀钩鍙伴粯璁ょ殑瀛楃﹂泦銆
2. stream娣诲姞灞炴
2.1 鈥滀负stream娣诲姞灞炴р濈殑浣滅敤
杩愮敤涓婇潰浠嬬粛鐨凧ava涓鎿嶄綔IO鐨凙PI锛屾垜浠灏卞彲瀹屾垚鎴戜滑鎯冲畬鎴愮殑浠讳綍鎿嶄綔浜嗐備絾閫氳繃FilterInputStream鍜孎ilterOutStream鐨勫瓙绫伙紝鎴戜滑鍙浠ヤ负stream娣诲姞灞炴с備笅闈浠ヤ竴涓渚嬪瓙鏉ヨ存槑杩欑嶅姛鑳界殑浣滅敤銆
濡傛灉鎴戜滑瑕佸線涓涓鏂囦欢涓鍐欏叆鏁版嵁锛屾垜浠鍙浠ヨ繖鏍锋搷浣滐細
FileOutStream fs = new FileOutStream(鈥渢est.txt鈥);
鐒跺悗灏卞彲浠ラ氳繃浜х敓鐨刦s瀵硅薄璋冪敤write()鍑芥暟鏉ュ線test.txt鏂囦欢涓鍐欏叆鏁版嵁浜嗐備絾鏄锛屽傛灉鎴戜滑鎯冲疄鐜扳滃厛鎶婅佸啓鍏ユ枃浠剁殑鏁版嵁鍏堢紦瀛樺埌鍐呭瓨涓锛屽啀鎶婄紦瀛樹腑鐨勬暟鎹鍐欏叆鏂囦欢涓鈥濈殑鍔熻兘鏃讹紝涓婇潰鐨凙PI灏辨病鏈変竴涓鑳芥弧瓒虫垜浠鐨勯渶姹備簡銆備絾鏄閫氳繃FilterInputStream鍜孎ilterOutStream鐨勫瓙绫伙紝涓篎ileOutStream娣诲姞鎴戜滑鎵闇瑕佺殑鍔熻兘銆
2.2 FilterInputStream鐨勫悇绉嶇被鍨
2.2.1 鐢ㄤ簬灏佽呬互瀛楄妭涓哄煎悜鐨処nputStream
1) DataInputStream锛氫粠stream涓璇诲彇鍩烘湰绫诲瀷锛坕nt銆乧har绛夛級鏁版嵁銆
2) BufferedInputStream锛氫娇鐢ㄧ紦鍐插尯
3) LineNumberInputStream锛氫細璁板綍input stream鍐呯殑琛屾暟锛岀劧鍚庡彲浠ヨ皟鐢╣etLineNumber()鍜宻etLineNumber(int)
4) PushbackInputStream锛氬緢灏戠敤鍒帮紝涓鑸鐢ㄤ簬缂栬瘧鍣ㄥ紑鍙
2.2.2 鐢ㄤ簬灏佽呬互瀛楃︿负瀵煎悜鐨処nputStream
1) 娌℃湁涓嶥ataInputStream瀵瑰簲鐨勭被銆傞櫎闈炲湪瑕佷娇鐢╮eadLine()鏃舵敼鐢˙ufferedReader锛屽惁鍒欎娇鐢―ataInputStream
2) BufferedReader锛氫笌BufferedInputStream瀵瑰簲
3) LineNumberReader锛氫笌LineNumberInputStream瀵瑰簲
4) PushBackReader锛氫笌PushbackInputStream瀵瑰簲
2.3 FilterOutStream鐨勫悇绉嶇被鍨
2.2.3 鐢ㄤ簬灏佽呬互瀛楄妭涓哄煎悜鐨凮utputStream
1) DataIOutStream锛氬線stream涓杈撳嚭鍩烘湰绫诲瀷锛坕nt銆乧har绛夛級鏁版嵁銆
2) BufferedOutStream锛氫娇鐢ㄧ紦鍐插尯
3) PrintStream锛氫骇鐢熸牸寮忓寲杈撳嚭
2.2.4 鐢ㄤ簬灏佽呬互瀛楃︿负瀵煎悜鐨凮utputStream
1) BufferedWrite锛氫笌BufferedOutStream瀵瑰簲
2) PrintWrite锛氫笌 PrintStream瀵瑰簲
3. RandomAccessFile
1) 鍙閫氳繃RandomAccessFile瀵硅薄瀹屾垚瀵规枃浠剁殑璇诲啓鎿嶄綔
2) 鍦ㄤ骇鐢熶竴涓瀵硅薄鏃讹紝鍙鎸囨槑瑕佹墦寮鐨勬枃浠剁殑鎬ц川锛歳锛屽彧璇伙紱w锛屽彧鍐欙紱rw鍙璇诲啓
3) 鍙浠ョ洿鎺ヨ烦鍒版枃浠朵腑鎸囧畾鐨勪綅缃
4. I/O搴旂敤鐨勪竴涓渚嬪瓙
import java.io.*;
public class TestIO{
public static void main(String[] args)
throws IOException{
//1.浠ヨ屼负鍗曚綅浠庝竴涓鏂囦欢璇诲彇鏁版嵁
/*褰撹诲彇鏂囦欢鏃讹紝鍏堟妸鏂囦欢鍐呭硅诲埌缂撳瓨涓锛屽綋璋冪敤in.readLine()鏃讹紝
鍐嶄粠缂撳瓨涓浠ュ瓧绗︾殑鏂瑰紡璇诲彇鏁版嵁锛堜互涓嬬畝绉扳滅紦瀛樺瓧鑺傝诲彇鏂瑰紡鈥濓級銆
*/
BufferedReader in = new BufferedReader(new FileReader("F:\\java\\TestIO.java"));
String s, s2 = new String();
while((s = in.readLine()) != null)
s2 += s + "\n";
in.close();
//1b. 鎺ユ敹閿鐩樼殑杈撳叆
/*鐢变簬鎯充互缂撳瓨瀛楄妭璇诲彇鏂瑰紡浠庢爣鍑咺O锛堥敭鐩橈級涓璇诲彇鏁版嵁锛屾墍浠ヨ
鍏堟妸鏍囧噯IO锛圫ystem.in锛夎浆鎹㈡垚瀛楃﹀煎悜鐨剆tream锛屽啀杩涜孊ufferedReader灏佽呫
*/
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter a line:");
System.out.println(stdin.readLine());
//2. 浠庝竴涓猄tring瀵硅薄涓璇诲彇鏁版嵁
/*
瑕佷互瀛楃︾殑褰㈠紡浠庝竴涓猄tring瀵硅薄涓璇诲彇鏁版嵁锛屾墍浠ヨ佷骇鐢熶竴涓猄tringReader绫诲瀷鐨剆tream銆
*/
StringReader in2 = new StringReader(s2);
int c;
while((c = in2.read()) != -1)
System.out.println((char)c);
in2.close();
//3. 浠庡唴瀛樺彇鍑烘牸寮忓寲杈撳叆
//鎶婂唴瀛樹腑鐨勪竴涓缂撳啿鍖轰綔涓篋ataInputStream浣跨敤
try{
DataInputStream in3 = new DataInputStream(new ByteArrayInputStream(s2.getBytes()));
while(true)
System.out.println((char)in3.readByte());
}catch(EOFException e){
System.out.println("End of stream");
}
//4. 杈撳嚭鍒版枃浠
/*瀵筍tring瀵硅薄s2璇诲彇鏁版嵁鏃讹紝鍏堟妸瀵硅薄涓鐨勬暟鎹瀛樺叆缂撳瓨涓锛屽啀浠庣紦鍐蹭腑杩涜岃诲彇锛涘筎estIO.out鏂囦欢杩涜屾搷浣滄椂锛
鍏堟妸鏍煎紡鍖栧悗鐨勪俊鎭杈撳嚭 鍒扮紦瀛樹腑锛屽啀鎶婄紦瀛樹腑鐨勪俊鎭杈撳嚭鍒版枃浠朵腑銆
*/
try{
BufferedReader in4 = new BufferedReader(new StringReader(s2));
PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("F:\\java\\ TestIO.out")));
int lineCount = 1;
while((s = in4.readLine()) != null)
out1.println(lineCount++ + "锛" + s);
out1.close();
in4.close();
} catch(EOFException ex){
ystem.out.println("End of stream");
}
//5. 鏁版嵁鐨勫瓨鍌ㄥ拰鎭㈠
/*瀵笵ata.txt鏂囦欢杩涜岃緭鍑烘椂锛屾槸鍏堟妸鍩烘湰绫诲瀷鐨勬暟鎹杈撳嚭灞嬬紦瀛樹腑锛屽啀鎶婄紦瀛樹腑鐨勬暟鎹杈撳嚭鍒版枃浠朵腑锛涘规枃浠惰繘琛岃诲彇鎿嶄綔鏃讹紝鍏堟妸鏂囦欢涓鐨勬暟鎹璇诲彇鍒扮紦瀛樹腑锛屽啀浠庣紦瀛樹腑浠ュ熀鏈绫诲瀷鐨勫舰寮忚繘琛岃诲彇銆傛敞鎰廼n5.readDouble()杩欎竴琛屻傚洜涓哄啓鍏ョ涓涓獁riteDouble()锛屾墍浠ヤ负浜嗘g‘鏄剧ず銆備篃瑕佷互鍩烘湰绫诲瀷鐨勫舰寮忚繘琛岃诲彇銆
*/
try{
DataOutputStream out2 = new DataOutputStream(new BufferedOutputStream( new FileOutputStream("F:\\java\\ Data.txt")));
out2.writeDouble(3.1415926);
out2.writeChars("\nThas was pi:writeChars\n");
out2.writeBytes("Thas was pi:writeByte\n");
out2.close();
DataInputStream in5 = new DataInputStream( new BufferedInputStream(new FileInputStream("F:\\java\\ Data.txt")));
BufferedReader in5br = new BufferedReader( new InputStreamReader(in5));
System.out.println(in5.readDouble());
System.out.println(in5br.readLine());
System.out.println(in5br.readLine());
} catch(EOFException e){
System.out.println("End of stream");
}
//6. 閫氳繃RandomAccessFile鎿嶄綔鏂囦欢
//閫氳繃RandomAccessFile绫诲规枃浠惰繘琛屾搷浣溿
RandomAccessFile rf =new RandomAccessFile("F:\\java\\ rtest.dat", "rw");
for(int i=0; i<10; i++)
rf.writeDouble(i*1.414);
rf.close();
rf = new RandomAccessFile("F:\\java\\ rtest.dat", "r");
for(int i=0; i<10; i++)
System.out.println("Value " + i + "锛" + rf.readDouble());
rf.close();
rf = new RandomAccessFile("F:\\java\\ rtest.dat", "rw");
rf.seek(5*8);
rf.writeDouble(47.0001);
rf.close();
rf = new RandomAccessFile("F:\\java\\ rtest.dat", "r");
for(int i=0; i<10; i++)
ystem.out.println("Value " + i + "锛" + rf.readDouble());
rf.close();
}
}
涓銆佹傚康Java涓瀵规枃浠剁殑鎿嶄綔鏄浠ユ祦鐨勬柟寮忚繘琛岀殑銆傛祦鏄疛ava鍐呭瓨涓鐨勪竴缁勬湁搴忔暟鎹搴忓垪銆侸ava灏嗘暟鎹浠庢簮锛堟枃浠躲佸唴瀛樸侀敭鐩樸佺綉缁滐級璇诲叆鍒板唴瀛樹腑锛屽舰鎴愪簡娴侊紝鐒跺悗灏嗚繖浜涙祦杩樺彲浠ュ啓鍒板彟澶栫殑鐩鐨勫湴锛堟枃浠躲佸唴瀛樸佹帶鍒跺彴銆佺綉缁滐級锛屼箣鎵浠ョО涓烘祦锛屾槸鍥犱负杩欎釜鏁版嵁搴忓垪鍦ㄤ笉鍚屾椂鍒绘墍鎿嶄綔鐨勬槸婧愮殑涓嶅悓閮ㄥ垎銆備簩銆佸垎绫绘祦鐨勫垎绫伙紝Java鐨勬祦鍒嗙被姣旇緝涓板瘜锛屽垰鎺ヨЕ鐨勪汉鐪嬩簡鍚庝細鎰熻夊緢鏅曘傛祦鍒嗙被鐨勬柟寮忓緢澶氾細1銆佹寜鐓ц緭鍏ョ殑鏂瑰悜鍒嗭紝杈撳叆娴佸拰杈撳嚭娴侊紝杈撳叆杈撳嚭鐨勫弬鐓у硅薄鏄疛ava绋嬪簭銆2銆佹寜鐓у勭悊鏁版嵁鐨勫崟浣嶄笉鍚屽垎锛屽瓧鑺傛祦鍜屽瓧绗︽祦锛屽瓧鑺傛祦璇诲彇鐨勬渶灏忓崟浣嶆槸涓涓瀛楄妭锛1byte=8bit锛夛紝鑰屽瓧绗︽祦涓娆″彲浠ヨ诲彇涓涓瀛楃︼紙1char = 2byte = 16bit锛夈3銆佹寜鐓у姛鑳界殑涓嶅悓鍒嗭紝鍒嗚妭鐐规祦鍜屽勭悊娴侊紝鑺傜偣娴佹槸鐩存帴浠庝竴涓婧愯诲啓鏁版嵁鐨勬祦锛堣繖涓娴佹病鏈夌粡杩囧寘瑁呭拰淇楗帮級锛屽勭悊娴佹槸鍦ㄥ硅妭鐐规祦灏佽呯殑鍩虹涓婄殑涓绉嶆祦锛孎ileInputStream鏄涓涓鎺ョ偣娴侊紝鍙浠ョ洿鎺ヤ粠鏂囦欢璇诲彇鏁版嵁锛屼絾鏄疊ufferedInputStream鍙浠ュ寘瑁匜ileInputStream锛屼娇寰楀叾鏈夌紦鍐插姛鑳姐傚叾瀹為櫎浜嗕互涓婁笁绉嶅垎绫诲栵紝杩樻湁涓浜涘父甯稿惉鍒扮殑涓浜涘垎绫绘瘮濡傦細瀵硅薄娴併佺紦鍐叉祦銆佸帇缂╂祦銆佹枃浠舵祦绛夌瓑銆傚叾瀹為兘鏄鑺傜偣娴佸拰澶勭悊娴佺殑瀛愬垎绫汇傚綋鐒朵綘涔熷彲浠ュ垱寤烘柊鐨勬祦绫诲瀷锛屽彧瑕佷綘闇瑕併備笁銆佹祦鍒嗙被鐨勫叧绯讳笉绠℃祦鐨勫垎绫绘槸澶氫箞鐨勪赴瀵屽拰澶嶆潅锛屽叾鏍规簮鏉ヨ嚜浜庡洓涓鍩烘湰鐨勭被銆傝繖涓鍥涗釜绫荤殑鍏崇郴濡備笅锛
瀛楄妭娴侊細
瀛楄妭娴佹槸鏈鍩烘湰鐨勬祦锛屾枃浠剁殑鎿嶄綔銆佺綉缁滄暟鎹鐨勪紶杈撶瓑绛夐兘渚濊禆浜庡瓧鑺傛祦銆傝屽瓧绗︽祦甯稿父鐢ㄤ簬璇诲彇鏂囨湰绫诲瀷鐨勬暟鎹鎴栧瓧绗︿覆娴佺殑鎿嶄綔绛夌瓑銆 鍏充簬瀛楄妭娴佺殑API锛屾病浠涔堝ソ璇寸殑锛岀湅鐪嬪氨鐭ラ亾浜嗐傝繖閲屾寫鍑犱釜鍏抽敭鐐癸細涓銆両nputStream鐨凙PI1銆乸ublic int read()浠庤緭鍏ユ祦璇诲彇涓嬩竴涓鏁版嵁瀛楄妭銆傝繑鍥 0 鍒 255 鑼冨洿鍐呯殑 int 瀛楄妭鍊笺傚傛灉鍥犲凡鍒拌揪娴佹湯灏捐屾病鏈夊彲鐢ㄧ殑瀛楄妭锛屽垯杩斿洖鍊 -1銆2銆乸ublic int read(byte[] b)浠庤緭鍏ユ祦涓璇诲彇涓瀹氭暟閲忕殑瀛楄妭骞跺皢鍏跺瓨鍌ㄥ湪缂撳啿鍖烘暟缁 b 涓銆備互鏁存暟褰㈠紡杩斿洖瀹為檯璇诲彇鐨勫瓧鑺傛暟銆傚傛灉鍥犱负娴佷綅浜庢枃浠舵湯灏捐屾病鏈夊彲鐢ㄧ殑瀛楄妭锛屽垯杩斿洖鍊 -1锛涘惁鍒欙紝鑷冲皯鍙浠ヨ诲彇涓涓瀛楄妭骞跺皢鍏跺瓨鍌ㄥ湪 b 涓銆傛ゆ柟娉曠瓑鍚屼簬read(b, 0, b.length)3銆乸ublic int read(byte[] b, int off, int len)灏嗚緭鍏ユ祦涓鏈澶 len 涓鏁版嵁瀛楄妭璇诲叆瀛楄妭鏁扮粍銆傚皾璇曡诲彇澶氳揪 len 瀛楄妭锛屼絾鍙鑳借诲彇杈冨皯鏁伴噺銆備互鏁存暟褰㈠紡杩斿洖瀹為檯璇诲彇鐨勫瓧鑺傛暟銆傚傛灉鐢变簬宸插埌杈炬祦鏈灏捐屼笉鍐嶆湁鏁版嵁锛屽垯杩斿洖 -1銆傚弬鏁帮細b - 璇诲叆鏁版嵁鐨勭紦鍐插尯銆俹ff - 鍦ㄥ叾澶勫啓鍏ユ暟鎹鐨勬暟缁 b 鐨勫垵濮嬪亸绉婚噺銆俵en - 瑕佽诲彇鐨勬渶澶у瓧鑺傛暟銆備簩銆丱utputStream鐨凙PI1銆乸ublic void write(int b)灏嗘寚瀹氱殑瀛楄妭鍐欏叆姝よ緭鍑烘祦銆倃rite 鐨勫父瑙勫崗瀹氭槸锛氬悜杈撳嚭娴佸啓鍏ヤ竴涓瀛楄妭銆傝佸啓鍏ョ殑瀛楄妭鏄鍙傛暟 b 鐨勫叓涓浣庝綅銆俠 鐨 24 涓楂樹綅灏嗚蹇界暐銆2銆乸ublic void write(byte[] b)灏 b.length 涓瀛楄妭浠庢寚瀹氱殑瀛楄妭鏁扮粍鍐欏叆姝よ緭鍑烘祦銆倃rite(b) 鐨勫父瑙勫崗瀹氭槸锛氬簲璇ヤ笌璋冪敤 write(b, 0, b.length) 鐨勬晥鏋滃畬鍏ㄧ浉鍚屻3銆乸ublic void write(byte[] b, int off, int len)灏嗘寚瀹氬瓧鑺傛暟缁勪腑浠庡亸绉婚噺 off 寮濮嬬殑 len 涓瀛楄妭鍐欏叆姝よ緭鍑烘祦銆倃rite(b, off, len) 鐨勫父瑙勫崗瀹氭槸锛氬皢鏁扮粍 b 涓鐨勬煇浜涘瓧鑺傛寜椤哄簭鍐欏叆杈撳嚭娴侊紱鍏冪礌 b[off] 鏄姝ゆ搷浣滃啓鍏ョ殑绗涓涓瀛楄妭锛宐[off+len-1] 鏄姝ゆ搷浣滃啓鍏ョ殑鏈鍚庝竴涓瀛楄妭銆傚弬鏁帮細b - 鏁版嵁銆俹ff - 鏁版嵁涓鐨勫垵濮嬪亸绉婚噺銆俵en - 瑕佸啓鍏ョ殑瀛楄妭鏁般4銆乸ublic void flush()鍒锋柊姝よ緭鍑烘祦骞跺己鍒跺啓鍑烘墍鏈夌紦鍐茬殑杈撳嚭瀛楄妭銆俧lush 鐨勫父瑙勫崗瀹氭槸锛氬傛灉姝よ緭鍑烘祦鐨勫疄鐜板凡缁忕紦鍐蹭簡浠ュ墠鍐欏叆鐨勪换浣曞瓧鑺傦紝鍒欒皟鐢ㄦゆ柟娉曟寚绀哄簲灏嗚繖浜涘瓧鑺傜珛鍗冲啓鍏ュ畠浠棰勬湡鐨勭洰鏍囥備笁銆佸嚑鐐瑰師鍒1銆佷笉绠℃槸杈撳叆杩樻槸杈撳嚭娴侊紝浣跨敤瀹屾瘯鍚庤乧lose()锛屽傛灉鏄甯︽湁缂撳啿鍖虹殑杈撳嚭娴侊紝搴斿湪鍏抽棴鍓嶈皟鐢╢lush()銆2銆佸簲璇ュ敖鍙鑳戒娇鐢ㄧ紦鍐插尯锛屾潵鍑忓皯IO娆℃暟锛屼互鎻愰珮鎬ц兘銆3銆佽兘鐢ㄥ瓧绗︽祦澶勭悊鐨勪笉鐢ㄥ瓧鑺傛祦銆傚洓銆佷緥瀛愪笅闈㈡槸涓涓鎿嶄綔瀛楄妭娴佺殑渚嬪瓙锛氳佹搷浣滅殑鏂囨湰鏂囦欢x.txt);
fos = new FileOutputStream(\"C:\\\\x.txt\");
long num = 0; //璇诲彇瀛楄妭璁℃暟
int bt = 0; //姣忔¤诲叆瀛楄妭鍐呭
//褰撹诲叆鏂囦欢鏈灏炬椂锛岃诲叆鏁版嵁鐨勫间负-1
//姣忔¤诲叆涓涓瀛楄妭锛屽瓨鏀惧埌鍙橀噺bt涓锛岀洿鍒拌诲畬鏁翠釜鏂囦欢
while ((bt = fis.read()) != -1) {
// System.out.print(bt); //浠ユ暟瀛楃殑褰㈠紡閫愪釜杈撳嚭鏂囦欢鐨勬瘡涓瀛楄妭
System.out.print((char) bt); //浠ュ瓧姣嶇殑褰㈠紡閫愪釜杈撳嚭鏂囦欢鐨勬瘡涓瀛楄妭
fos.write(bt); //灏嗗瓧鑺傚啓鍏ヨ緭鍑烘祦涓锛屽疄鐜版枃浠剁殑鍔熻兘
num++;
}
System.out.println(\"璇诲彇鐨勫瓧鑺傛暟涓\" + num);
fis.close();
fos.close();
} catch (FileNotFoundException e) {
System.out.println(\"鎵句笉鍒版寚瀹氱殑鏂囦欢锛\");
e.printStackTrace();
} catch (IOException e) {
System.out.println(\"鏂囦欢璇诲彇鏃跺彂鐢烮O寮傚父锛\");
e.printStackTrace();
}
}
/**
* 缂撳啿鐨勫瓧鑺傛祦娴嬭瘯
*/
public static void testBufferedStream() {
int buffer = 10; //缂撳啿澶у皬
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(\"C:\\\\x.txt\"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(\"C:\\\\bf2.txt\"));
int bench = 0;
byte bts[] = new byte[buffer]; //鍒涘缓瀛楄妭娴佺紦瀛
while ((bis.read(bts)) != -1) {
bos.write(bts); //灏嗗瓧鑺傚啓鍏ヨ緭鍑烘祦涓锛屽疄鐜版枃浠剁殑鍔熻兘
bench++;
}
System.out.println(\"bench=\" + bench);
//灏嗚緭鍏ユ祦缂撳啿鍖轰腑鐨勬暟鎹鍏ㄩ儴鍐欏嚭锛堝崈涓囪颁綇)
bos.flush();
bis.close();
bos.close();
} catch (FileNotFoundException e) {
System.out.println(\"鎵句笉鍒版寚瀹氱殑鏂囦欢锛\");
e.printStackTrace();
} catch (IOException e) {
System.out.println(\"鏂囦欢璇诲彇鏃跺彂鐢烮O寮傚父锛\");
e.printStackTrace();
}
}
/**
* 瀛楄妭娴佺殑閫夋嫨璇诲彇娴嬭瘯
*/
public static void testSelectStream() {
OutputStream fos = null;
int buffer = 25;
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(\"C:\\\\x.txt\"));
fos = new FileOutputStream(\"C:\\\\testSelectStream.txt\");
byte bts[] = new byte[buffer]; //鍒涘缓缂撳瓨
//浠庤緭鍏ユ祦鐨勭5涓瀛楄妭寮濮嬶紝寰鍚庤诲彇10涓瀛楄妭锛屽瓨鏀惧埌缂撳瓨bts涓
//杩欎釜鏂规硶鏈変釜闄烽槺锛岀紦瀛榖uffer鐨勫ぇ灏忔渶灏忎负鈥滃亸绉婚噺+瑕佽诲彇瀛楄妭鏁扳濓紝鍦ㄦ℃渶灏忓簲璇ヤ负15锛屽惁鍒欐姏IndexOutOfBoundsException寮傚父
bis.read(bts, 5, 10);
//灏嗗瓧鑺傚啓鍏ヨ緭鍑烘祦涓锛屽疄鐜版枃浠剁殑鍔熻兘
fos.write(bts);
bis.close();
fos.close();
} catch (FileNotFoundException e) {
System.out.println(\"鎵句笉鍒版寚瀹氱殑鏂囦欢锛\");
e.printStackTrace();
} catch (IOException e) {
System.out.println(\"鏂囦欢璇诲彇鏃跺彂鐢烮O寮傚父锛\");
e.printStackTrace();
}
}
}娉ㄦ剰浜嗭細1銆佺紦鍐茬殑鍔熻兘搴旇ラ氳繃鐩稿簲鐨勭紦鍐叉祦鏉ュ寘瑁呭師濮嬫祦鏉ュ疄鐜帮紝鑰屼笉鏄鑷宸辫繛缁澶氭℃暟鎹锛屾渶鍚庡啓鍒颁竴涓鏁扮粍涓锛岃繖鏄寰堟剼鏄х殑鍋氭硶锛堜絾鏄杩樻湁寰堝氫汉鍦ㄧ敤锛夈2銆乺ead(byte[] b, int off, int len)杩欎釜鏂规硶瑕佸ソ濂戒綋浼氫簡锛屽線寰鍜屼綘鎯宠薄鐨勪笉涓鏍枫3銆佸皢璇诲彇鐨勪竴涓瀛楄妭寮哄埗杞鎹涓篶har鏄涓嶅悎閫傜殑锛岄櫎闈炰綘鎯崇湅鐪嬭兘杈撳嚭浠涔堛
瀛楃︽祦锛
瀛楃︽祦鐨勫勭悊鍜屽瓧鑺傛祦宸涓嶅氾紝API鍩烘湰涓婂畬鍏ㄤ竴鏍凤紝灏辨槸璁¢噺鍗曚綅涓嶅悓銆傚彟澶栧瓧绗︽祦杩樻彁渚涗竴浜涘叾浠栫殑澶勭悊娴侊紝姣斿傛寜琛岃诲彇娴併佸瓧绗︿覆娴佺瓑绛夈備笅闈㈢粰涓渚嬪瓙鐪嬬湅锛
import java.io.*;/**
* 瀛楃︽祦娴嬭瘯
* @author 2008-8-27 22:16:44
*/
public class TestIOStream {
public static void main(String[] args) {
testReaderWriter();
testLineNumberReader();
} /**
* 甯︾紦鍐茬殑瀛楃︽祦
*/
public static void testReaderWriter() {
int bufsize = 25;
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(\"C:\\\\x.txt\")));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File(\"C:\\\\xb.txt\"))); char buf[] = new char[bufsize]; //瀛楃︾紦鍐插尯
while (bufferedReader.read(buf) != -1) {
bufferedWriter.write(buf);
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close(); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 鎸夎岃诲彇鐨勫瓧绗︽祦
*/
public static void testLineNumberReader() {
try {
LineNumberReader lineNumberReader = new LineNumberReader(new BufferedReader(new FileReader(new File(\"C:\\\\x.txt\")))); String lineString; //琛屽瓧绗︿覆鍙橀噺
int x = 0; //琛屽彿
while ((lineString = lineNumberReader.readLine()) != null) {
x++;
System.out.println(\"琛屽彿锛\" + x + \" >>>\" + lineString);
}
lineNumberReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
杩愯岀粨鏋滐細
琛屽彿锛1 >>>鐧芥棩渚濆北灏斤紝榛勬渤鍏ユ捣娴併
琛屽彿锛2 >>>娆茬┓鍗冮噷鐩锛屾洿涓婁竴灞傛ゼ銆
琛屽彿锛3 >>>
琛屽彿锛4 >>>鈥斺 鐜嬩箣娑c婄櫥楣抽泙妤笺
⑦ java.io的Java流输入输出原理
Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。
在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流。 按流向分:
输入流: 程序可以从中读取数据的流。
输出流: 程序能向其中写入数据的流。
按数据传输单位分:
字节流: 以字节为单位传输数据的流
字符流: 以字符为单位传输数据的流
按功能分:
节点流: 用于直接操作目标设备的流
过滤流: 是对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能。 JDK所提供的所有流类位于java.io包中,都分别继承自以下四种抽象流类。
InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。
OutputStream:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。
Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。
Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。 BufferedInputStream BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。 BufferedOutputStream 该类实现缓冲的输出流。 BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 ByteArrayInputStream ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。 ByteArrayOutputStream 此类实现了一个输出流,其中的数据被写入一个 byte 数组。 CharArrayReader 此类实现一个可用作字符输入流的字符缓冲区。 CharArrayWriter 此类实现一个可用作 Writer 的字符缓冲区。 Console 此类包含多个方法,可访问与当前 Java 虚拟机关联的基于字符的控制台设备(如果有)。 DataInputStream 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。 DataOutputStream 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。 File 文件和目录路径名的抽象表示形式。 FileDescriptor 文件描述符类的实例用作与基础机器有关的某种结构的不透明句柄,该结构表示开放文件、开放套接字或者字节的另一个源或接收者。 FileInputStream FileInputStream 从文件系统中的某个文件中获得输入字节。 FileOutputStream 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。 FilePermission 此类表示对文件和目录的访问。 FileReader 用来读取字符文件的便捷类。 FileWriter 用来写入字符文件的便捷类。 FilterInputStream FilterInputStream 包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。 FilterOutputStream 此类是过滤输出流的所有类的超类。 FilterReader 用于读取已过滤的字符流的抽象类。 FilterWriter 用于写入已过滤的字符流的抽象类。 InputStream 此抽象类是表示字节输入流的所有类的超类。 InputStreamReader InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。 LineNumberInputStream 已过时。此类错误假定字节能充分表示字符。