JAVA中关于PrintWriter写入节点流的问题,纠结一天了,求高手帮忙!!!在线等!!!
发布网友
发布时间:2022-04-09 06:18
我来回答
共3个回答
热心网友
时间:2022-04-09 07:47
少了一句pw.flush();。将缓冲区数据输出。
这样就OK了。
ByteArrayOutputStream buf = new ByteArrayOutputStream();//新建一个数组节点流
PrintWriter pw = new PrintWriter(new OutputStreamWriter(buf,"utf-8"));//新建一个PrintWriter的处理流
pw.print("It's my java!");//将字符串序列化写入节点流
pw.flush();
byte[] b = buf.toByteArray();//将节点流buf中的数组抓出来
System.out.println(Arrays.toString(b));//这里打印出的结果竟然是空 [ ],,,为什么!
pw.close();
lush() 是把缓冲区的数据强行输出, 一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。追问意思是他默认封装为了一个BufferedStream缓冲流是吗?
追答不是缓冲流,而是缓存起来了,没有被输出。IO上输出的数据都要先被存在一个缓存区域,等待被输出。而flush方法就是强制输出并且清除缓存。和缓冲流不同的。
热心网友
时间:2022-04-09 09:05
不要new ,直接
private OutputStream outputStream;
outputStream = socket.getOutputStream();
outputStream.write(s);
outputStream.flush();
热心网友
时间:2022-04-09 10:40
没有flush,数据未输出。