import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.DataInputStream;
import java.io.ByteArrayInputStream;public class TestInputStreamReader{
public static void main(String args[]){
ByteArrayOutputStream byos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(byos);
try{
dos.writeInt(99);
dos.writeDouble(Math.random());
dos.writeChar('A');
dos.close();
byos.close();
//这边把流close掉
}catch(IOException e){
e.printStackTrace();
}
DataInputStream dis =
new DataInputStream(new ByteArrayInputStream(byos.toByteArray()));
//这边怎么还能继续调用啊?
try{
System.out.println(dis.readInt());
System.out.println(dis.readDouble());
System.out.println(dis.readChar());
}catch(IOException e){
e.printStackTrace();
}
}
}
解决方案 »
- Java一道经典算法题!!!求解!
- 一道SCJP的题目
- 请问这样用JAVA实现奇偶排序是否有需要改进的地方
- 编译可以通过,执行时出错:NoClassDefFoundError,
- 一个小问题!
- 发现JAVA的BLOG还是不错的,大家进来瞧瞧~
- java.io.FileNotFoundException的问题
- 请教一个关于在TreeNode上显示ToolTip的问题
- 请问getConnection里面的Properties应该怎么设置?
- java单例模式成员变量修饰词用static final问题在哪。。
- Boolean valueOf(boolean b)方法的一个疑问
- Java.Util.Date!!!
------------------
这个流本质是字节数组流,外面包装一层流过滤,字节流关闭无效,仍可以调用。其他流就不行了。抛出流已经关闭异常。
toByteArray
public byte[] toByteArray()创建一个新分配的字节数组。其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。 返回:
以字节数组的形式返回此输出流的当前内容。
另请参见:
size()
这个关闭流有什么关系吗?上下文的联系而已。
dos.close();
byos.close();
dos和byos起的作用是往该缓冲区写东西,你写完后,就必须手动将他们关闭(你可看作是一种编程规范),代表不再进行写操作了,其实你在最后关闭也没什么影响,只不过那样你可能就好理解了,而后面的byos.toByteArray()是把该缓冲区的内容转换为一个字节数组,该方法byos关不关闭都没影响,前后之间并没有矛盾