ある画像について、ギャラリーの「詳細情報」で見たファイルサイズと、Javaコード内でFile#length()したときのファイルサイズが大きく異なるという事象に遭遇したので、ひとまず現象だけ覚書。
File#length()したときのファイルサイズ
検証コード@gist
↑インテントでギャラリー呼んで、選んだ画像のファイルパスを手に入れるだけのコードです。
1965307Byte≒1.87MB。
ギャラリーに表示されているものの倍近いサイズです。なんぞ。
Dropbox経由で引っ張りだしてMac側で見た時のサイズ
1965307バイト。File#length()と同じ結果ですね。
んん? なんでギャラリーでは小さく表示されるんだろう?
Android File Transferで見た時のサイズ
Android File Transferとは、端末をマスストレージモードにしなくてもExternal Storage領域のデータをやりとりできる、Mac10.5&Honeycomb以上限定の素敵かどうかと言われると微妙なツールなのである!
ということで何となくこのツールでもファイルを見てみた。
1.0MB・・・?
流石に不審です。ドラッグアンドドロップでファイルを引きずり出してみましょう。
えっ
Android File Transfer経由で引っ張りだしてMac側で見た時のサイズ
サイズとかそういう次元じゃなかった。なんか欠損してる。
1095414Byte≒1.04MBなので、当初のギャラリーでの表示とは辻褄が合ってる。
考察
GNのファイルシステムがサイズの計算間違えてる感じなんだろうか。
- 何故かファイルシステムはこの画像を1.04MBだと思っている(というのがたぶんメタ情報として入っちゃってる)
- ギャラリーはイチイチ画像とか直接読んでられないので、たぶんメタ情報だけを見て1.04MBだって言ってる
- 本当は1.87MBある画像ファイルをFile Transferで取り出そうとすると、1.04/1.87MB分しか転送しない
- なのでMacに転送されたものには欠損が起こる(別に端末内で欠損が起こってるわけではないたぶん)
感想&まとめ
むーん・・・。なんなんだろうこれ。
ひとまずFile#length()で読んでくる値は正しい感じがするから、仕事で詰まってた部分に関しては問題ないかな・・・。
うちにあるGN以外では試してないので、他所でも起きる現象なのかどうかは分かりませんが、とりあえずこんなことがありましたということで。