全新java初学者实践教程22(java SE5.0版) MJG)fFl]O
输入/输出 ^spASG-o
CxJH)H$
-](3iPy}
输入[font="Times]/输出([font="Times]I/O)是每一项计算机语言,必须有的东西。不让人输入数据的话,计算机怎么处理数据呢?在[font="Times]java语言中,[font="Times]I/O的方式是流的方式。流([font="Times]stream)这是个学习[font="Times]java输入输出的最基本的概念。 h;t5v6["
b0[H{q-z{X
流是字节从源到目的的有序序列。一方面是字节,一方面是有序的。流描述的是一个过程,顺序严格。一个需要键盘输入的程序可以用流来做到这一点。两种基本的流是:输入流和输出流。你可以从输入流读,但你不能对它写。要从输入流读取字节,必须有一个与这个流相关联的字符源。这些东西都放在java.io.*这个包里了。 rB.LG'GG]
io是java的第一大包。在[font="Times]java.io 包中,有一些流是结点流,即它们可以从一个特定的地方读写,例如磁盘或者一块内存。其他流称作过滤流。一个过滤器输入流是用一个到已存在的输入流的连接创建的。此后,当你试图从过滤输入流对象读时,它向你提供来自另一个输入流对象的字符。 W(jP??up
常见的几种流: eG%Q
3h
[font="Times] e*pYlm
◆ 字节流:传字节的。以8位字节为单位进行读写,以InputStream与OutputStream为基础类 RhI>Ak;-
◆ 字符流: 传字符的。以16位字符为单位进行读写,以Reader与Writer为基础类 ){"-J&@?
◆ 文件流: 传文件的。属于节点流,对文件读写,传输。里面的类很多。 |"k+j_/+
◆ 序列化:传对象的。一个对象怎么读啊,只有变成二进制才可以读,这就是序列化。 8&++S> <
实践: //这是一个字节流的例子,以InputStream与OutputStream为基础类 we2D!Ywr
import java.io.*; 9pq-"?vHY0
class ByteArrayOutputStreamDemo { SAN/fnM
public static void main(String args[]) throws IOException {
ui1h M
ByteArrayOutputStream f = new ByteArrayOutputStream(); fC!+"g55
String s = "This should end up in the array"; (zhi/>suG
byte buf[] = s.getBytes(); |v= */e
f.write(buf); 'L ]k\GO
System.out.println("Buffer as a string"); H05U{vR
System.out.println(f.toString()); K6e_RzP,.w
System.out.println("Into array"); mW_ N-z
byte b[] = f.toByteArray(); 0uS6F8x@
@ \JoICz
for (int i=0; i gBJM|"_A?
System.out.print((char) b);} K)TMr"j\
System.out.println("\nTo an OutputStream()"); NEcE-7aT
//输出到文件test.txt中 zn/b\X/
OutputStream f2 = new FileOutputStream("test.txt"); Q5/BEUkC
f.writeTo(f2); gshgl3
f2.close(); >kG: MJj
System.out.println("Doing a reset"); zM++Z*
f.reset(); Ap9 %5:]
for (int i=0; i ^3w
>:4m
f.write('X'); 75RQ\_zDu
System.out.println(f.toString());}} Hy#<fKz`!
//字符流的例子,以Reader与Writer为基础类 o :_'R5
import java.io.*; `Y.Q{5Y
public class CharArrayReaderDemo { ~"i4"Op&
public static void main(String args[]) throws IOException { cA25FD
4
X6_p(
String tmp = "abcdefghijklmnopqrstuvwxyz"; F;<cG`|Rx
int length = tmp.length(); 4%,E;fB?=
char c[] = new char[length]; ~+bS D<!b
tmp.getChars(0, length, c, 0); P |kfPohI=
CharArrayReader input1 = new CharArrayReader(c); )L%[(iI,x
CharArrayReader input2 = new CharArrayReader(c, 0, 5); 1bpjj'2%x
Ah1fcXED
int i; i")ucrf
System.out.println("input1 is:"); ky|Py
while((i = input1.read()) != -1) { h-=lZ~W~
System.out.print((char)i);} t.= 1<Ed
System.out.println(); Kf'oXCs
System.out.println("input2 is:"); J?84WS
while((i = input2.read()) != -1) { `HJRXoLySW
System.out.print((char)i);} J G3#(DVc;
System.out.println(); ~6O<5@k
}} ,[|4{qli\
//文件流的例子 e$=0.GWT
import java.io.*; t+m
ug
class FileInputStreamDemo { -KFozwr5/
public static void main(String args[]) throws Exception { `=VN\W^&
int size; m{C
InputStream f = Y+e a
new FileInputStream("FileInputStreamDemo.java"); FvV:$V|
System.out.println("Total Available Bytes: " + 3ew`e"s
(size = f.available())); ;-@v1I;
int n = size/40; q8P$Md-=b1
System.out.println("First " + n + 4/ M~#
" bytes of the file one read() at a time"); 2N[S*#~*e
for (int i=0; i E6mwvrm8
System.out.print((char) f.read()); J:JkX>n%k=
} "I)`gy&
System.out.println("\nStill Available: " + f.available()); G$!JJ.
)d
System.out.println("Reading the next " + n + zd^QG
" with one read(b[])"); .m_-L
Y-
byte b[] = new byte[n]; dsD!)$
if (f.read(b) != n) { c(G;O)ikS
System.err.println("couldn't read " + n + " bytes."); KiO1l{.s8n
} 8sGaq [
System.out.println(new String(b, 0, n)); *:hHlH* t1
System.out.println("\nStill Available: " + (size = f.available())); 5p`.RWls
System.out.println("Skipping half of remaining bytes with skip()"); D_)n\(3
f.skip(size/2); YQ#o3sjs
System.out.println("Still Available: " + f.available()); TE t+At`]
System.out.println(" Reading " + n/2 + " into the end of array"); %W:]OPURK
if (f.read(b, n/2, n/2) != n/2) { 8^ezqd`
System.err.println("couldn't read " + n/2 + " bytes."); \oc*
} l8Ks{(wh
System.out.println(new String(b, 0, b.length)); y{]iwO;
System.out.println("\nStill Available: " + f.available()); V [KFZSA
f.close(); j1U,X
} 6
s1lf!
} yp.\KLq8)
12个例子打包下载 UA]U_P$c
代码很多如有不明白的地方请访问技术论坛, 还有序列化的例子没有举出,序列化在java中是个很重要的概念哦。我们下节课。具体举例讲解。