2016-07-03 46 views
3

我有像“192.168.1.1”这样的IP地址字符串。是否有可能使用java 8流解析字符串,并得到原始字节数组。目前,我有代码用java 8个流解析字符串

Arrays.stream(address.split("\\.")) 
     .map(UnsignedBytes::parseUnsignedByte) 
     .toArray(Byte[]::new); 

哪里是UnsignedBytes是番石榴类返回字节,但是这个代码返回byte []不是字节[]

更新: 是的,我了解为什么字节流类缺席。 我的问题是关于,是否有可能获得使用java-8流的字节数组,而没有诸如创建中间列表之类的开销。

+0

我可能想到做到这一点的唯一方法是编写自定义收集器。这可能会奏效,但这可能会很棘手。 –

+0

您可能会收集到一个列表并使用番石榴的“Bytes.toArray”来获取原始数组。 –

+3

可能的重复[在Java 8中,是否有ByteStream类?](http://stackoverflow.com/questions/32459683/in-java-8-is-there-a-bytestream-class) – user140547

回答

3

您可以使用Java's InetAddress类。

InetAddress i = InetAddress.getByName("192.168.1.1"); 
byte[] bytes = i.getAddress(); 
+1

我喜欢这个答案,但javadoc说*结果是网络字节顺序:地址的最高位字节在'getAddress()[0]'*中。我认为你需要反转字节数组以适应OP的需要。 – Bohemian

+0

@Bohemian不知道OP想要什么命令。上面的代码在'bytes [0]'中有192个,'bytes [1]'中有168个,依此类推。这对我有意义。 – Robert

+0

我一定在想位(其中0是“最后”位)。这可以! – Bohemian