小编eri*_*c.m的帖子

Java - ByteBuffer 还是 ArrayList<Byte>?

最近我创建了一个包装器来读取和写入数据到一个byte数组中。为此,我一直在使用ArrayList<Byte>,但我想知道这是否是最有效的方法,因为:

  • addAll()不适用于byte数组(即使使用Arrays.asList(),它返回 me List<Byte[]>)。为了修复它,我只是循环并byte在每个循环中添加一个,但我想这假设了很多函数调用,因此它具有性能成本。
  • 同样的情况,为得到一个byte[]ArrayList。我无法从Byte[]to投射byte[],所以我必须使用循环。
  • 我想存储 Byte 而不是 byte 会使用更多的内存。

我知道ByteArrayInputStream并且ByteArrayOutputStream可以用于此,但它有一些不便之处:

  • 我想实现以不同字节顺序读取不同数据类型的方法(例如readIntreadLEIntreadUInt、 等),而这些类只能读取/写入字节或字节数组。这不是真正的问题,因为我可以在包装器中修复它。但是第二个问题来了。
  • 我希望能够同时写入和读取,因为我正在使用它来解压缩一些文件。因此,要为它创建一个包装器,我需要同时包含ByteArrayInputStreamByteArrayOutputStream。我不知道这些是否可以以某种方式同步,或者我每次写入包装器时都必须将一个的整个数据写入另一个。

所以,我的问题来了:使用 aByteBuffer会更有效吗?我知道您可以从中获取integers,floats等,甚至可以更改字节顺序。我想知道的是,使用 aByteBuffer和 a之间是否存在真正的性能变化ArrayList<Byte>

java bytebuffer arraylist

5
推荐指数
1
解决办法
2009
查看次数

JavaFX - 不能在 MenuItem 中使用下划线

当我遇到一个非常奇怪的问题时,我正在使用 JavaFX 创建一个程序。我想用包含下划线 (_) 的文本创建一个 MenuItem,但是当显示该文本时,下划线消失了。这是一个示例代码:

public class JavaFXTest extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        BorderPane mainPane = new BorderPane();

        MenuBar menuBar = new MenuBar();
        Menu menu = new Menu("Menu");
        menuBar.getMenus().add(menu);

        MenuItem item = new MenuItem("Test_underscore");
        menu.getItems().add(item);

        mainPane.setTop(menuBar);

        primaryStage.setScene(new Scene(mainPane, 890, 570));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

它不显示“Test_underscore”,而是显示:

在此处输入图片说明

有谁知道这里会发生什么?

java javafx menuitem

3
推荐指数
1
解决办法
313
查看次数

Swing字体看起来比应该的小

我正在使用一个Swing程序,该程序需要显示给定字体大小的文本。但是我注意到在Swing中,文本看起来比应该的要小得多。与Microsoft Word相比,使用小字体几乎无法读取该文本。

Swing和Microsoft Word都使用Arial8。区别很明显。 在此处输入图片说明

对于那些想尝试的人,这是一个小例子:

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200, 200);
    frame.setLocationRelativeTo(null);

    JLabel label = new JLabel("This is my test text which should look bigger");
    label.setFont(new Font("Arial", Font.PLAIN, 8));

    frame.add(label);

    frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud)

任何人都知道会发生什么事吗?

java fonts swing

1
推荐指数
2
解决办法
707
查看次数

标签 统计

java ×3

arraylist ×1

bytebuffer ×1

fonts ×1

javafx ×1

menuitem ×1

swing ×1