簡體   English   中英

Java中的自定義數據類型

[英]Custom Data-type in Java

對於應用程序,我需要具有24位的無符號數據類型。 不幸的是,這種數據類型在Java中不可用。 我打算將其實現為一個新類。但是我不確定這種實現的性能。

最好寫自己的課嗎?

如果可行,是否有可能表現良好?

大概,您的意思是將其實現為使用較大數據類型和邊界檢查的類,如下所示:

public class Unsigned24 {
    private static final MAX_UNSIGNED24 = Math.pow(2, 24) - 1;
    private static final MIN_UNSIGNED24 = 0;

    private final int value;

    public Unsigned24(int value) {
        if (value > MAX_UNSIGNED24 || value < MIN_UNSIGNED24)
            throw new IllegalArgumentException("value out of bounds: " + value);
        this.value = value;
    }

    public int getValue() {
        return value;
    }

// ... other methods, such as equals(), comparison, addition, subtraction, etc.
}

這會起作用,但可能不值得為此煩惱。 另外,它實際上並不只占用24位內存,而是占用32位內存和一個對象的開銷。

這確實取決於您的目標。 為什么要使用24位整數。

僅僅是因為您在值上有界限約束嗎? 如果是這樣,您可能想要執行上述操作。

是因為您有很多它們,並且想要節省內存嗎? 如果是這樣,您可能想要構建一個類來抽象一個24位整數數組,並在內部將它們連續保存在字節數組中。

是因為您要與某些硬件或網絡接口連接,而這些接口期望恰好是24位? 在這種情況下,您可能需要查看java.nio類。

如果要節省空間,可以使用int進行計算,並將最低有效3個字節映射到一個byte []或僅映射三個字節:

  public static byte[] convert(int i) {
    return new byte[]{ (i & 0xff0000) >> 16, (i & 0xff00) >> 8, (i & 0xff) };
  }

  public static int convert(byte[] b) {
    if (b == null && b.length != 3)
      throw new IllegalArgumentException();

      return (b[2] << 16) | (b[1] << 8) | b;
  }

(無法驗證它是否沒有錯誤,但至少它應該給出一個主意)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM