全新java初学者实践教程22(java SE5.0版) n6Q 3X
输入/输出 Ta/G
j?w7X?1(
CoJaVLl
输入[font="Times]/输出([font="Times]I/O)是每一项计算机语言,必须有的东西。不让人输入数据的话,计算机怎么处理数据呢?在[font="Times]java语言中,[font="Times]I/O的方式是流的方式。流([font="Times]stream)这是个学习[font="Times]java输入输出的最基本的概念。 -iH/~a
0pkU1t~9
流是字节从源到目的的有序序列。一方面是字节,一方面是有序的。流描述的是一个过程,顺序严格。一个需要键盘输入的程序可以用流来做到这一点。两种基本的流是:输入流和输出流。你可以从输入流读,但你不能对它写。要从输入流读取字节,必须有一个与这个流相关联的字符源。这些东西都放在java.io.*这个包里了。 Qt>yRt
io是java的第一大包。在[font="Times]java.io 包中,有一些流是结点流,即它们可以从一个特定的地方读写,例如磁盘或者一块内存。其他流称作过滤流。一个过滤器输入流是用一个到已存在的输入流的连接创建的。此后,当你试图从过滤输入流对象读时,它向你提供来自另一个输入流对象的字符。 '^Sa|WXq
常见的几种流: +#&2*nY
[font="Times] )}WG`
◆ 字节流:传字节的。以8位字节为单位进行读写,以InputStream与OutputStream为基础类 #B+2qD>E
◆ 字符流: 传字符的。以16位字符为单位进行读写,以Reader与Writer为基础类 &
NOKrN~HX
◆ 文件流: 传文件的。属于节点流,对文件读写,传输。里面的类很多。 8(Z*Vz uu
◆ 序列化:传对象的。一个对象怎么读啊,只有变成二进制才可以读,这就是序列化。 zac>tXU;
实践: //这是一个字节流的例子,以InputStream与OutputStream为基础类 ;'gzRC
import java.io.*; !7%L%~z^
class ByteArrayOutputStreamDemo { +hXph
public static void main(String args[]) throws IOException { B>?. Nr
ByteArrayOutputStream f = new ByteArrayOutputStream(); Z8'uZ#=Yw
String s = "This should end up in the array"; >-)i_C2
byte buf[] = s.getBytes(); vj{h*~
f.write(buf); 0dIJgKanGP
System.out.println("Buffer as a string"); :4Q_\'P
System.out.println(f.toString()); ? `FI!3j
System.out.println("Into array"); t~U:{g~
byte b[] = f.toByteArray(); FpW{=4yk
P\N`E?lJL
for (int i=0; i (''`Ce
System.out.print((char) b);} `]tXQqD
System.out.println("\nTo an OutputStream()"); uE5kL{Fv
//输出到文件test.txt中 x]a>Q),
OutputStream f2 = new FileOutputStream("test.txt"); ,qvz:a
f.writeTo(f2); fWKv3S1dT
f2.close(); [xI@)5Xk
System.out.println("Doing a reset"); d(To)ly.
f.reset(); ,HMB`vF
for (int i=0; i (5G^"Srw
f.write('X'); NaVZ)
System.out.println(f.toString());}} cp.)K!$
//字符流的例子,以Reader与Writer为基础类 2^qY,dL
import java.io.*; ;AG5WPI
public class CharArrayReaderDemo { -u{k
public static void main(String args[]) throws IOException { o"UqI
p(Qm\g<
String tmp = "abcdefghijklmnopqrstuvwxyz"; +(|T\%$DT
int length = tmp.length(); 7J>n;8{%?
char c[] = new char[length]; m! p'nP
tmp.getChars(0, length, c, 0); oz[E>%
CharArrayReader input1 = new CharArrayReader(c); Xv:<sX
CharArrayReader input2 = new CharArrayReader(c, 0, 5); u.!Pda
]Ff&zBJ
int i; r ."Dc
System.out.println("input1 is:"); vn,L),"=
while((i = input1.read()) != -1) { ~9'VP}\
System.out.print((char)i);} C@Wm+E~;8
System.out.println(); sKHUf1
System.out.println("input2 is:"); %
;6e@U}
while((i = input2.read()) != -1) { iY*Xm,#
System.out.print((char)i);} M:C*?;K:
System.out.println(); GD*6tk;5/
}} pQEHWq"Q
//文件流的例子 mH}AVje{
`
import java.io.*; k#&y
class FileInputStreamDemo { x%x[5.CT
public static void main(String args[]) throws Exception { y4shW|>5_
int size; c]xpp;% ]
InputStream f = bLNQ%=FjO
new FileInputStream("FileInputStreamDemo.java"); DQ'+,bxk=9
System.out.println("Total Available Bytes: " + Wigm`A=,r
(size = f.available())); ^QFjBQ-Hai
int n = size/40; {}lw%d?A
System.out.println("First " + n + ^(&:=r.PC
" bytes of the file one read() at a time"); J-I7K!B
for (int i=0; i teM&[U
System.out.print((char) f.read()); OwDjUKeN
} [_H9l)
System.out.println("\nStill Available: " + f.available()); ^M?uv{354
System.out.println("Reading the next " + n + n|^-qy'w
" with one read(b[])"); {d7KJmN
byte b[] = new byte[n]; Vw)\#6FL
if (f.read(b) != n) { =ohdL_6
System.err.println("couldn't read " + n + " bytes."); Ui1K66{
} Lw!@[;2
System.out.println(new String(b, 0, n)); T]E$H, p
System.out.println("\nStill Available: " + (size = f.available())); Wxp^*._q3I
System.out.println("Skipping half of remaining bytes with skip()"); :.sK:W("v
f.skip(size/2); GbZA3.J]yl
System.out.println("Still Available: " + f.available()); Gm.v-T$
System.out.println(" Reading " + n/2 + " into the end of array"); x{ZcF=4
if (f.read(b, n/2, n/2) != n/2) { 9 -TFyZYU
System.err.println("couldn't read " + n/2 + " bytes."); Q$RP2&
} 1` 9/[2z
System.out.println(new String(b, 0, b.length)); ][_:{ N/
System.out.println("\nStill Available: " + f.available()); $RF"m"
f.close(); oA42?I ^
} w@oq.K
} -G*u2i_*
12个例子打包下载 xp,H5
m%
代码很多如有不明白的地方请访问技术论坛, 还有序列化的例子没有举出,序列化在java中是个很重要的概念哦。我们下节课。具体举例讲解。