Java

【java】サロゲートペア置換

いろいろ探したのだが、個人的に求めている「コレ!」というコーディングサンプルが見つからなかったので 自分なりに作ってみた「サロゲートペア置換」

【java】Serializableについて2(改行を含むデータを出力する)


DBからデータを取得する(SELECTして結果をResultSetで受け取る)のは比較的簡単なので、 受け取った結果をStringにしてしまえばあとはBufferedWriter使って出力するのはそれほど難しくはない。
ただ、DBのほうに改行が入っているような場合、 CSVやTSV等、テキストファイルにしてしまうとその項目で1行ずれてしまって、結果的に出力状態が不正になる。
DBのデータをそのまま別DBに移植する場合等、 区分値や数値だけで構成された簡単なテーブル構造であればCSVやTSVにしてSQLLoaderするのが手軽なのだが こういうデータに関してはいちいちexpやexpdpを使って(いわゆるバイナリファイルにして)取り扱わないと別DBへの移植がしづらいという難点がある。
これを、JDBCを使った接続方式によるデータ取得の結果としてSerializableを併用することで自前のexpdpを実現する方法をメモとして残す。


【java】Serializableについて


javaにはオブジェクトの内容をそのままファイルにして出力したり、そのファイルを読み込んでオブジェクトとして復帰させる方法が存在する。
Serializableというインターフェースを実装することでそれが可能になる。
ある目的のために少し勉強したことがあるので、簡単な実現方法と共にここにメモ書きを残す。


 


【java】文字列をMD5ハッシュ化


与えられた文字列をMD5でハッシュ値に変換する方法のメモ

 


 


【java】Listについて


勘違いしていたというか、内心ちょびっとだけ「そんなにうまくはいかないか」と思っていたら実際そうだったんだが、
java.util.Listは=で同じ型の別変数に移しても内容が維持されるらしい。
2つの異なる変数間で同じメモリの内容を共有するようになるというか。

例えば、List(変数名:list)で5つの要素を格納した後、
別のList(変数名:list2)にlistをそのまま移して、
list2側でremoveかけると、list2もlistも要素数が4になる(list2だけ5⇒4に減るわけではない)。


 


【java】時間の加算とオフセットの扱い


javaで時間を加算する実装例。
ストレイテナーのシミュレーションするときにテスト的にやったのでメモとして残す。

特に「時」(Hour)の部分がない文字列からDateFormatを通して時間に変換した後、別の時間と合計する場合は、
オフセットを適切な箇所に加算ないし減算してあげる必要がある。
これは、「時」の部分がない文字列のDateFormat#parseでは1970/01/01 00:00:00をもとに変換されたDateインスタンスを得るからである。
よって、基準となる1970/01/01 09:00:00からすると過去の日時であるため「負数」となり、
これを単純加算していくと負数+負数でどんどん小さくなり、結果的にわけのわからん時刻になる。

例えば47分2秒+14分58秒だが、当然だが「1時間2分0秒」という値がほしいのに対し、
オフセット加算をしないと「16時間2分」になる。
これは、
47分 2秒=1970/01/01 00:47:02=-29578000ミリ秒
14分58秒=1970/01/01 00:14:58=-31502000ミリ秒
で、合計すると-61080000ミリ秒となり、
1970/01/01 09:00:00からすると「過去の日時」を指すことになるので、
結果的に「1969/12/31 16:02:00」になる。
これをHH:mm:ssでパースして「16:02:00」、つまり「16時間2分」になってるように見えてしまうのだ。



 


【JAVA】native2asciiのpropertiesファイルを復元


全角文字を含む値(VALUE)を持つjavaのpropertiesファイルは、使用する環境を考慮してか得てしてnative2ascii化されていることが多い。

よって、メモ帳やらサクラエディタ等の、一般的なテキストエディタで開くとこんな感じに見えてしまう↓

  
test.key=\u30d5\u30a1\u30a4\u30eb\u306e\u51fa\u529b\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002  
#ちなみに"ファイルの出力に失敗しました"と書いてある  

当然この状態だと何書いてあるかわからんので日本語にしたいのだが、

知っているかぎりエディタ上でこれを日本語で復元して読み込んでくれるのはEclipseしかなく、

いちいちこのpropertiesファイルのために重いEclipse立ち上げるのも億劫で

手軽なnative2asciiの復元方法や、エディタがあればいいなあと思っていた。

どうもコマンドプロンプト上でnative2asciiコマンドを使うのが最も手っ取り早そうなので、

ここでその使い方を記述する。