我有这个程序:
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()
,我会这样:
答案 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();