使用java 8流解析字符串

时间:2016-07-03 21:06:54

标签: java java-8 guava java-stream

我有ip地址字符串,如“192.168.1.1”。是否可以使用java 8流解析字符串并获得原始字节数组。目前我有代码

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

其中UnsignedBytes是返回字节的guava类,但此代码返回Byte []而不是byte []

更新 是的,我读到了为什么没有ByteStream类。 我的问题是,是否有可能使用java-8流获取字节数组,而无需创建中间列表等开销。

2 个答案:

答案 0 :(得分:3)

您可以使用Java's InetAddress类。

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

答案 1 :(得分:1)

您可以使用Pattern.splitAsStream(CharSequence)在收藏家中使用ByteArrayOutputStream

byte[] bytes = Pattern.compile("\\.")
        .splitAsStream(address)
        .mapToInt(Integer::parseInt)
        .collect(
                ByteArrayOutputStream::new,
                ByteArrayOutputStream::write,
                (baos1, baos2) -> baos1.write(baos2.toByteArray(), 0, baos2.size())
        )
        .toByteArray();

收集改编自https://stackoverflow.com/a/32470838/3255152的代码。