为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡子哥哥 2022-05-20 18:32:01
我有这个程序: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);        }    }}开始后我有输出:hzhzhzhzhzhzhzhz .....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()我有这个:
查看完整描述

2 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

您面临的问题不是调用,Integer.valueOf(666).toString()因为它只执行一次。实际的问题是,调用System.out.write()有一些开销。这可以通过使用填充了一些重复输入值的更大缓冲区来避免。


这是我想出的:


long start = System.currentTimeMillis();

byte[] bytes = String.valueOf(666).getBytes();


// use 20 mb of memory for the output buffer

int size = 20 * 1000 * 1000  / bytes.length;



byte[] outBuffer = new byte[size * bytes.length];

// fill the buffer which is used for System.out.write()

for (int i = 0; i < size; i++) {

    System.arraycopy(bytes, 0, outBuffer, i * bytes.length, bytes.length);

}


// perform the actual writing with the larger buffer

int times = 10_000_000 / size;

for (int i = 0; i < times; i++) {

    System.out.write(outBuffer, 0, outBuffer.length);

}

long end = System.currentTimeMillis();

System.out.println();

System.out.println("Took " + (end - start) + "Millis");

输出 666 千万次大约需要 600ms。


查看完整回答
反对 回复 2022-05-20
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

这看起来是正确的。如果您将int666 转换为 a char,则将显示该内容。如果您想从字面上打印出 666,则需要将其转换intString第一个:

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


查看完整回答
反对 回复 2022-05-20
  • 2 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信