使用System.out.write方法将int转换为字节数组并打印到控制台

时间:2019-01-23 18:38:19

标签: java arrays int nio outputstream

我有这个程序:

public class Duplicates {
    public static void main(String[] args) {
        byte[] bytes = "hz".getBytes();
        for (int i = 0; i < 10_000_000; i++) {
            System.out.write(bytes, 0, bytes.length);
        }
    }
}

启动后,我输出:

  

hzhzhzhzhzhzhzhzhz ..... hz

但是,如果我尝试将int转换为字节数组并打印:

public class Duplicates {
    public static void main(String[] args) {
        byte[] bytes = ByteBuffer.allocate(4).putInt(666).array();
        for (int i = 0; i < 10_000_000; i++) {
            System.out.write(bytes, 0, bytes.length);
        }
    }
}

启动后,我输出:

  

.........    ��������

我想在控制台的每一行上打印666 10,000,000次,并且占用的内存不超过20MB或1秒。

我在做什么错?

编辑:如果我将使用示例@Justin-Integer.toString(i).getBytes(),我会这样:

enter image description here

2 个答案:

答案 0 :(得分:1)

您面临的问题不是对flutter doctor --android-licenses的调用,因为它仅执行一次。实际的问题是,对Integer.valueOf(666).toString()的调用有一些开销。可以通过使用较大的缓冲区来避免这种情况,该缓冲区填充了一些重复的输入值。

这是我想出的:

System.out.write()

大约需要600毫秒才能输出666千万次。

答案 1 :(得分:0)

这看起来很正确。如果将int 666强制转换为char,将显示该内容。如果要从字面上打印出666,则需要先将int转换为String

byte[] bytes = Integer.toString(input).getBytes();