1.有什么理由必须要用字符流?
答:处理字符数据的语法更方便、自动化字符编码
2.插入哪些代码可以让下面的代码正确编译?
Console console = System.console();
String color = console.readLine("What is your favorite color? ");
console.____("Your favorite color is "+color);
答:控制台输出定义了两个方法,format()和printf()。另外,还可以使用writer()方法来获取控制台的PrintWriter对象。故答案有三个:printf、format、writer().println
4.高级流和低级流
ObjectOutputStream和ObjectInputStream执行低级流序列化和反序列化,属于低级流。
PrintStreamand PrintWriter格式文本分别作用于低级的OutputStream和writer,但它俩本身属于高级流。
FileWriter和FileInputStream直接在文件上操作,属于低级流。
OutputStream是一个抽象父类,既不是高级也不属于低级。
5.假如有一个InputStream,接下来的内容是XYZABC,下面代码中假如count为3,下面代码执行结果是?
public static String pullBytes(InputStream is, int count) throws IOException
{
is.mark(count);
final StringBuilder sb = new StringBuilder();
for(int i=0; i
sb.append((char)is.read());
is.reset();
is.skip(1);
sb.append((char)is.read());
return sb.toString();
}
解析:
并不是所有的java输入输出流支持mark()操作;因此,如果没有调用mark- Supported() ,其结果直到运行时都是未知的。如果流支持mark()操作,那么结果将是XYZY,因为reset()操作将流回到mark()被调用之前的位置,skip(1)就会被跳过。但如果流不支持mark()操作,可能会抛出一个运行时异常。
因此当不知道输入流是否支持mark()操作时,The result cannot be determined with the information given(结果不能够被确定)。