今晚把io的最后一小段视频学习完了,感觉对io真的已经有点陌生了。看来以后要在io这块下狠功夫了,明天开始学习网络编程的视频。
视频学完了,这几个练习题都不能一下子解答出来,io需要加强。
字节输入流类:
InputStream
FileInputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
FilterInpuStream
DataInputStream
PushbackInputStream
BufferedInputStream
LineNumberInputStream
StringBufferInputStream
ByteArrayInputStream
OutputStream
FileOutputStream
ObjectOutputStream
FilterOutputStream
DataOutputStream
BufferedOutputStream
PrintStream
PipedOutputStream
ByteArrayoutputStream
Reader
BufferedReader
LineNumberReader
CharArrayReader
StringReader
InputStreamReader
FileReader
PipedReader
FilterReader
PushbackReader
Writer
BufferedWriter
CharArrayWriter
StringWriter
OutputStreamWriter
FileWriter
PrintWriter
PipedWriter
FilterWriter
Decorater设计模式:
在程序中用一个对象(the Decorators)包装另外的一个对象,这是一种被称为Decorator的设计模式。
如果要设计自己的io包装类,这个类需要继承以FilterXXX命名的类,例如,设计一对输入输出包装类:RecordInputStream和RecordOutputStream,来完成从数据库文件中读取记录和往数据库文件中写入记录。
Exception类从Throwable类继承的三个printStackTrace方法的定义如下:
-public void printStackTrace()
-public void printStackTrace(PrintStream s)
-public void printStackTrace(PrintWriter s)
该如何把printStackTrace方法打出的详细异常信息存储到一个字符串中?
public class TestPrintWriter{
public static void main(String[] args){
try{
throw new Exception("test");
}catch(Exception e){
//异常信息只能写入PrinrWriter
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
System.out.println(e.getMessage());
//System.out.println(sw.toString());
}
}
}
思考与实践(1):
1.编写一个程序,将一个目录极其子目录下的所有txt类型的文本文件中的内容合并到若干个新的文本文件中,当第一个新产生的文件中存储的内容达到1m bytes时,剩下的内容存储到第二个新的文件中,依次往下,新产生的文本文件名依次为1.txt,2.txt,......。
2.用自己的话叙述什么是流,什么是节点流,什么是包装类。
3.编写一个函数,把StringReader输入流中所有英文字母变成大写字母,并将结果写入到一个StringWriter输出流对象中。然后,用这个函数将一个字符串中的所有字符转换成大写。
4.用记事本程序创建一个内容只有“中国”这两个字符的文本文件,然后用不同的编码格式分别保存这个文本文件。用UntralEdit打开这些不同编码格式的文件,并用十六进制方式查看它们的内容,结合你所看到的内容来叙述各种编码格式之间的差异。
思考与实践(2):
5.编写下面的程序代码,分析和观察程序的运行结果:
import java.io.*;
public class InputReader{
public static void main(String[] args){
try{
InputStreamReader isr = new InputStreamReader(System.in, "ISO-8859-1");
BufferedReader br = new BufferedReader(isr);
String strLine = br.readLine();
for(int i=0;i<strLine.length();i++){
System.out.println(Integer.toHexString((int)strLine.charAt(i)));
}
isr.close();
System.out.println(strLine);
}catch(Exception e){
e.printStackTrace();
}
}
}
输入“中国”后,程序的运行结果如下:
d6
d0
d9
fa
???u
请按照下面的两种要求修改上面的程序代码,让程序能够正常打印出输入的中文字符。
(1)修改程序中的语句:
InputStreamReader isr = new InputStreamReader(System.in, "ISO-8859-1");
(2)不修改上面的语句,而是修改下面的语句:
System.out.pritnln(strLine);
(1)是修改成InputStreamReader isr = new InputStreamReader(System.in, "gb2312");