DataSize

DataSize は、アップロード上限やキャッシュサイズのようなデータ量を、バイト数の整数として保持します。

使う理由

設定に 10485760 ではなく 10MB と書けて、コードは単位を推測せずに型付きの値を読めます。デフォルトの変換サービスは 10MB、512KB、100(バイト)、および単なる int(バイト)を DataSize に変換します。この型の @Value パラメーターや @ConfigurationProperties のフィールドを宣言して、結果を使ってください。

テキスト形式のルール:

値がデータ量ではなく個数なら、単なる int を使ってください。

例

# lib/resources/application.properties
shop.upload.max-size=10MB
import 'package:spring_core_dart/spring_core_dart.dart';

@Service()
class UploadGuard {
  UploadGuard(@Value(r'${shop.upload.max-size:5MB}') this.maxSize);

  final DataSize maxSize;

  // 設定されたサイズより大きい本文を拒否する。
  bool accepts(List<int> body) => body.length <= maxSize.toBytes();
}

コードでの使い方:

DataSize.parse('10MB').toBytes(); // 10485760
DataSize.parse('2', unit: DataUnit.kilobytes).toBytes(); // 2048
DataSize.ofMegabytes(5).compareTo(DataSize.ofGigabytes(1)); // 負の値: 小さい
DataSize.ofKilobytes(1536).toMegabytes(); // 1 (0 方向に切り捨て)
DataSize.ofBytes(1024).toString(); // '1024B'

DataSize は Comparable<DataSize> と == を実装しています。< 演算子はないので、compareTo で比較してください。

メンバー

名前 型 意味
DataSize.ofBytes(int) コンストラクター ちょうどそのバイト数のサイズ。
DataSize.ofKilobytes(int)、ofMegabytes、ofGigabytes、ofTerabytes コンストラクター その単位でのサイズ。
DataSize.of(int amount, DataUnit unit) コンストラクター 実行時に選んだ単位でのサイズ。
DataSize.parse(text, {unit}) DataSize 10MB、512kb、100 を読む。単位のない数値は unit(指定がなければバイト)。それ以外は FormatException。
toBytes() int バイト数。
toKilobytes()、toMegabytes()、toGigabytes()、toTerabytes() int その単位での整数値。0 方向に切り捨て。
isNegative bool 0 未満かどうか。
toString() String B 付きのバイト数(10485760B)。parse で読み戻せる。

DataUnit の値: bytes(B)、kilobytes(KB)、megabytes(MB)、gigabytes(GB)、terabytes(TB)。それぞれ suffix と byteCount を持ちます。

Spring (Java) との対応

@ConfigurationProperties("shop.upload")
class UploadProperties {
  private DataSize maxSize = DataSize.ofMegabytes(5);
  // getter and setter
}

DataSize size = DataSize.parse("10MB");
long bytes = size.toBytes();

重要な違い:

関連項目