全新java初学者实践教程22(java SE5.0版) O9dIobu4
输入/输出 M@E*_U!U
*(PGLYK
l}5@6;}
输入[font="Times]/输出([font="Times]I/O)是每一项计算机语言,必须有的东西。不让人输入数据的话,计算机怎么处理数据呢?在[font="Times]java语言中,[font="Times]I/O的方式是流的方式。流([font="Times]stream)这是个学习[font="Times]java输入输出的最基本的概念。 #
0dN!l;
loLQ@?E
流是字节从源到目的的有序序列。一方面是字节,一方面是有序的。流描述的是一个过程,顺序严格。一个需要键盘输入的程序可以用流来做到这一点。两种基本的流是:输入流和输出流。你可以从输入流读,但你不能对它写。要从输入流读取字节,必须有一个与这个流相关联的字符源。这些东西都放在java.io.*这个包里了。 op/HZa
io是java的第一大包。在[font="Times]java.io 包中,有一些流是结点流,即它们可以从一个特定的地方读写,例如磁盘或者一块内存。其他流称作过滤流。一个过滤器输入流是用一个到已存在的输入流的连接创建的。此后,当你试图从过滤输入流对象读时,它向你提供来自另一个输入流对象的字符。 0}PW<lU-
常见的几种流: 7^ITedW@
[font="Times] >|/NDF=\s
◆ 字节流:传字节的。以8位字节为单位进行读写,以InputStream与OutputStream为基础类 -s,^_p{H
◆ 字符流: 传字符的。以16位字符为单位进行读写,以Reader与Writer为基础类 !G90oW
◆ 文件流: 传文件的。属于节点流,对文件读写,传输。里面的类很多。 `QnKal )
◆ 序列化:传对象的。一个对象怎么读啊,只有变成二进制才可以读,这就是序列化。 )d2 <;c
实践: //这是一个字节流的例子,以InputStream与OutputStream为基础类 _K_!(]t
import java.io.*; QDF1$,s4i
class ByteArrayOutputStreamDemo { (UAa
public static void main(String args[]) throws IOException { C~yfuPr\B
ByteArrayOutputStream f = new ByteArrayOutputStream(); 1*Yf[;L
String s = "This should end up in the array"; V&eti2&zO
byte buf[] = s.getBytes(); bT|a]b:
f.write(buf); /![S 3Ol
System.out.println("Buffer as a string"); *rXESw]BR
System.out.println(f.toString()); R/Mwq#xUb
System.out.println("Into array"); ?nn`ud?f
byte b[] = f.toByteArray(); x$[<<@F%
z+@aQ@75
for (int i=0; i &<_*yl p
System.out.print((char) b);} A{bt
Z#k
System.out.println("\nTo an OutputStream()"); qb]n{b2
//输出到文件test.txt中 `kpX}cKK}
OutputStream f2 = new FileOutputStream("test.txt"); X2}\i5{
f.writeTo(f2); hJ (Q^Z
f2.close(); 1j`-lD
System.out.println("Doing a reset"); Q&opnvN
f.reset(); lQ<2Vw#Yl
for (int i=0; i C5CUMYU
f.write('X'); IgI*mDS&b
System.out.println(f.toString());}} j#f+0
//字符流的例子,以Reader与Writer为基础类 N /p9Ws
import java.io.*; 2%m H
public class CharArrayReaderDemo { &BY%<h0c
public static void main(String args[]) throws IOException { ryB^$Kh,,
eB%KXPhMm
String tmp = "abcdefghijklmnopqrstuvwxyz"; AE={P*g
int length = tmp.length(); 8V`NQS$
char c[] = new char[length]; 9TIyY`2!
tmp.getChars(0, length, c, 0); h3Nwxj~E
CharArrayReader input1 = new CharArrayReader(c); %[u6<
CharArrayReader input2 = new CharArrayReader(c, 0, 5); Kyt.[" p
!hrXud=#"
int i; 9%S{fd\#
System.out.println("input1 is:"); <Bn^+u \
while((i = input1.read()) != -1) { : ^F+mQN
System.out.print((char)i);} 5x(`z
System.out.println(); AjKP -[
System.out.println("input2 is:"); J;W(}"cFq
while((i = input2.read()) != -1) { =Mzg={)v
System.out.print((char)i);} g{.>nE^Sc5
System.out.println(); :!Wijdq
}} I?YTX
//文件流的例子 ZR.1SA0x?O
import java.io.*; [^EU'lewnW
class FileInputStreamDemo { d rnqX-E;
public static void main(String args[]) throws Exception { 5+vCuVZ
int size; |NJe4lw+?
InputStream f = L(\sO=t
new FileInputStream("FileInputStreamDemo.java"); &tB|l_p_-p
System.out.println("Total Available Bytes: " + 3FT%.dV^
(size = f.available())); #s$b\"4
int n = size/40; K{.s{;#
System.out.println("First " + n + 7F5t&
" bytes of the file one read() at a time"); e^&QT
for (int i=0; i 1t_$pDF}
System.out.print((char) f.read()); guz{DBlK
} KE1S5Mck>
System.out.println("\nStill Available: " + f.available()); PVP,2Yq!
System.out.println("Reading the next " + n + Fq!12/Nn
" with one read(b[])"); QZB2yK3]h
byte b[] = new byte[n]; 9yH95uaDF
if (f.read(b) != n) { #~3x^4Y
System.err.println("couldn't read " + n + " bytes."); MlgE-Lm
} M>D 3NY[,
System.out.println(new String(b, 0, n)); |RDmY!9&
System.out.println("\nStill Available: " + (size = f.available())); T)&J}^j
System.out.println("Skipping half of remaining bytes with skip()"); 2.ud P
f.skip(size/2); a% |[m,FvP
System.out.println("Still Available: " + f.available()); ' @>FtF[Gu
System.out.println(" Reading " + n/2 + " into the end of array"); ;ZHKTOoK
if (f.read(b, n/2, n/2) != n/2) { "D}PbT[V
System.err.println("couldn't read " + n/2 + " bytes."); a\S"d
} ]:i
:QiYD
System.out.println(new String(b, 0, b.length)); O{ zY(`[
System.out.println("\nStill Available: " + f.available()); C7[ge&
f.close(); jCDZ$W89
} MH[Zw$
} C9E l {f
12个例子打包下载 F`SOF O
代码很多如有不明白的地方请访问技术论坛, 还有序列化的例子没有举出,序列化在java中是个很重要的概念哦。我们下节课。具体举例讲解。