Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将字符串转换为ByteBuffer_Java_Arrays_String_Byte_Bytebuffer - Fatal编程技术网

在Java中将字符串转换为ByteBuffer

在Java中将字符串转换为ByteBuffer,java,arrays,string,byte,bytebuffer,Java,Arrays,String,Byte,Bytebuffer,我想将ASCII字符串转换为ByteBuffer,我遇到了以下两种方法: ByteBuffer.wrap(str.getBytes(StandardCharsets.US_ASCII)) 及 StandardCharsets.US\u ASCII.encode(str) 他们的区别是什么(也许在性能方面也是如此)? 这些会产生相同的结果吗?使用平台默认字符集,不一定是ASCII 使用平台的默认字符集将该字符串编码为字节序列,并将结果存储到新的字节数组中 StandardCharsets.US\u

我想将ASCII字符串转换为ByteBuffer,我遇到了以下两种方法:

ByteBuffer.wrap(str.getBytes(StandardCharsets.US_ASCII))

StandardCharsets.US\u ASCII.encode(str)

他们的区别是什么(也许在性能方面也是如此)? 这些会产生相同的结果吗?

使用平台默认字符集,不一定是ASCII

使用平台的默认字符集将该字符串编码为字节序列,并将结果存储到新的字节数组中

StandardCharsets.US\u ASCII.encode
实际上使用ASCII

但是,如果您使用
str.getBytes(StandardCharsets.US\u ASCII)
,那么它们将在高层执行相同的操作

在快速查看了它们的实现之后,
getBytes
似乎做了一件与
encode
非常不同的事情,因此要找出哪一个在性能方面更快,您必须做一个基准测试

编辑:

我编写了一个JMH基准测试:

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 10)
@Fork(value = 1)
public class Main {

    static final String s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

    public static void main (String args[]) throws IOException, RunnerException {
        org.openjdk.jmh.Main.main(args);
    }

    @Benchmark
    public void wrap(Blackhole bh) {

        bh.consume(ByteBuffer.wrap(s.getBytes(StandardCharsets.US_ASCII)));
    }

    @Benchmark
    public void encode(Blackhole bh) {
        bh.consume(StandardCharsets.US_ASCII.encode(s));
    }
}
结果是:

Benchmark    Mode  Cnt     Score    Error  Units
Main.encode  avgt   20  2407.242 ± 28.147  ns/op
Main.wrap    avgt   20   199.227 ±  4.093  ns/op

所以
wrap
要快得多。

谢谢您指出这一点。我更新了原来的帖子,使它们更具可比性,因为我确实只对ASCII感兴趣。