Java之数据流DataInput(Output)Stream 和 字节数组流 ByteArrayInput(Output) Stream的嵌套
来源:互联网 发布:java 自定义函数 编辑:程序博客网 时间:2024/05/16 15:12
学到网络编程这一章,马老师提出了一个问题:怎样使用Java传输一个long类型的数?
额,能力有限,所以看了答案后解析下,加深印象。
发送端(TestUDPClient)方法如下:
import java.net.*;import java.io.*;public class TestUDPClient{public static void main(String args[]) throws Exception{long n = 10000L;ByteArrayOutputStream baos = new ByteArrayOutputStream();DataOutputStream dos = new DataOutputStream(baos);dos.writeLong(n);byte[] buf = baos.toByteArray();System.out.println(buf.length);DatagramPacket dp = new DatagramPacket(buf, buf.length,new InetSocketAddress("127.0.0.1", 5678));DatagramSocket ds = new DatagramSocket(9999);ds.send(dp);ds.close();}}
可以看到实际上java并没有提供1个封装好的方法,致使是long这个基本类型的封装类Long, 也没有提供转换为ByteArray的方法.。
但是Java提供两个流, 它们嵌套使用的话, 就相当于实现了上面所说的功能, 将各种基本类型转换为字节数组。
它们就是DataOutputStream 和 ByteArrayOutputStream。
long n = 10000L;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeLong(n);
在这一段中,可以看到一个long类型的数通过数据流传输了出去。
那么接收端怎样接收呢:
import java.net.*;import java.io.*;public class TestUDPServer{public static void main(String args[]) throws Exception{byte buf[] = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, buf.length);DatagramSocket ds = new DatagramSocket(5678);while(true){ds.receive(dp);ByteArrayInputStream bais = new ByteArrayInputStream(buf);DataInputStream dis = new DataInputStream(bais);System.out.println(dis.readLong());}}}
在这一段中,可以看到数据通过数据流传输了进来。
再运用DataOutputStream 和 ByteArrayOutputStream嵌套使用后:
ds.receive(dp);
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readLong());
很轻松的就拿到了long类型数据。
实在是厉害,零散的知识就这样结合并运用了。
不过我在想可不可以用这个方法传输任意一个object对象呢,我再试试。
- Java之数据流DataInput(Output)Stream 和 字节数组流 ByteArrayInput(Output) Stream的嵌套
- 数据流DataInput(Output)Stream 和 字节数组流 ByteArrayInput(Output) Stream
- stream output的含义
- Java的IO之字节流(stream)
- IO流(Input Output Stream)总结1
- 字节流之Output
- java8之数据流Stream的Map和flatMap的区别
- Java 8 数据流Stream的基本使用
- Use printf to output stream on STM32F4
- Stream数据流
- Stream数据流
- Core Java - 流(Stream) - 字节流和字符流(一)
- java 的stream流
- storm运行异常之No output fields defined for component:stream XxxBolt:null
- storm运行异常之No output fields defined for component:stream XxxBolt:null疑案追踪
- java.lang.IllegalStateException: Already using output stream分析及处理办法
- Stream自行总结的技巧,如果设置一个字节数组接收一个未知长度的流Stream
- javax.imageio.IIOException: Can't create output stream!
- 解决Python certificate verify failed的问题
- String、StringBuffer与StringBuilder之间区别
- 关于HTTP请求和响应报文格式
- vim实用技巧
- 并查集(递推法)+路径压缩(转)
- Java之数据流DataInput(Output)Stream 和 字节数组流 ByteArrayInput(Output) Stream的嵌套
- 例题课本例题3-1转换==整数从大到小排序
- 初步进行JDBC的步骤
- HDU 5875 Function(单调栈+在线倍增法)
- Swift 3.0 重大版本发生了哪些变化,各位看官请
- 《Java编程思想第四版》笔记---14章 附:包装类--装箱和拆箱
- 二分查找
- 64. Minimum Path Sum DP经典问题
- 创新科技,只为尊重音乐原声:dFiM睿妙深度剖析