少了一句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()。
不要new ,直接
private OutputStream outputStream;
outputStream = socket.getOutputStream();
outputStream.write(s);
outputStream.flush();
没有flush,数据未输出。