diff --git a/pom.xml b/pom.xml index e7bbad6..48eded1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 net.time4j time4j-tool - 1.2 + 1.5 jar Time4J-Tool diff --git a/src/main/java/net/time4j/tool/TimezoneRepositoryCompiler.java b/src/main/java/net/time4j/tool/TimezoneRepositoryCompiler.java index 553bf60..1ed531c 100644 --- a/src/main/java/net/time4j/tool/TimezoneRepositoryCompiler.java +++ b/src/main/java/net/time4j/tool/TimezoneRepositoryCompiler.java @@ -42,6 +42,7 @@ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -754,24 +755,24 @@ private void compile( "Cannot create subdirectory for compiled version: " + subdir); } - ObjectOutputStream oos = - new ObjectOutputStream( + DataOutputStream dos = + new DataOutputStream( new FileOutputStream( new File(subdir, TZDATA + ".repository"))); try { - oos.writeByte('t'); - oos.writeByte('z'); - oos.writeByte('r'); - oos.writeByte('e'); - oos.writeByte('p'); - oos.writeByte('o'); - oos.writeUTF(version); - this.compile(oos, zones, rules); - this.compileLinks(oos, zones.keySet(), links); - this.compileLeapSeconds(oos, leaps, expires); + dos.writeByte('t'); + dos.writeByte('z'); + dos.writeByte('r'); + dos.writeByte('e'); + dos.writeByte('p'); + dos.writeByte('o'); + dos.writeUTF(version); + this.compile(dos, zones, rules); + this.compileLinks(dos, zones.keySet(), links); + this.compileLeapSeconds(dos, leaps, expires); } finally { try { - oos.close(); + dos.close(); } catch (IOException ex) { // ignored } @@ -798,12 +799,12 @@ private void compile( } private void compile( - ObjectOutputStream oos, + DataOutputStream dos, Map> zoneMap, Map> ruleMap ) throws IOException { - oos.writeInt(zoneMap.size()); + dos.writeInt(zoneMap.size()); for (Map.Entry> zoneEntry : zoneMap.entrySet()) { String zoneID = zoneEntry.getKey(); @@ -905,8 +906,14 @@ private void compile( ZonalOffset.ofTotalSeconds(initialOffset), transitions, rules); - oos.writeUTF(zoneID); + dos.writeUTF(zoneID); + ByteArrayOutputStream bos = new ByteArrayOutputStream(8192 * 10); + ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(history); + byte[] data = bos.toByteArray(); + oos.close(); + dos.writeInt(data.length); + dos.write(data); } catch (IllegalArgumentException iae) { throw new IllegalArgumentException( "Inconsistent data found for: " + zoneID, @@ -917,7 +924,7 @@ private void compile( } private void compileLinks( - ObjectOutputStream oos, + DataOutputStream dos, Set zones, List links ) throws IOException { @@ -948,31 +955,33 @@ private void compileLinks( normalized.put(alias, index); } - oos.writeShort(normalized.size()); + dos.writeShort(normalized.size()); for (String alias : normalized.keySet()) { - oos.writeUTF(alias); - oos.writeShort(normalized.get(alias).shortValue()); + dos.writeUTF(alias); + dos.writeShort(normalized.get(alias).shortValue()); } } private void compileLeapSeconds( - ObjectOutputStream oos, + DataOutputStream dos, List leaps, PlainDate expires ) throws IOException { - oos.writeShort(leaps.size()); + dos.writeShort(leaps.size()); for (LeapLine ll : leaps) { - oos.writeShort(ll.year); - oos.writeByte(ll.month); - oos.writeByte(ll.day); - oos.writeByte(ll.shift); + dos.writeShort(ll.year); + dos.writeByte(ll.month); + dos.writeByte(ll.day); + dos.writeByte(ll.shift); } - oos.writeObject(expires); + dos.writeShort(expires.getYear()); + dos.writeByte(expires.getMonth()); + dos.writeByte(expires.getDayOfMonth()); }