diff options
author | Paul Duffin <paulduffin@google.com> | 2015-12-07 15:54:05 +0000 |
---|---|---|
committer | Paul Duffin <paulduffin@google.com> | 2015-12-11 07:43:01 +0000 |
commit | 6b489f77ae70bea07f3a8fbd877368b4e0f3142c (patch) | |
tree | 795d2abf37f433cd1ebcd759b81b1b2fc0bf4d54 /libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java | |
parent | abeb971bf494d4d67b68dea4b83e737724682d1b (diff) | |
download | libphonenumber-6b489f77ae70bea07f3a8fbd877368b4e0f3142c.tar.gz |
Upgrade to version 7.2.1 (Second Attempt)
This introduces a runtime dependency on nano protobuf. The
classes are jarjared from com.google.protobuf.nano into
com.android.protobuf.nano and will be built as part of the
ext library built in frameworks/base/Android.mk.
Bug: 24793335
Change-Id: I7bd8a5d3988d21ea5bb0fdaaad09df298e53e16a
Diffstat (limited to 'libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java')
-rw-r--r-- | libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java b/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java index e6f44dee..0d998c75 100644 --- a/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java +++ b/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java @@ -16,16 +16,16 @@ package com.google.i18n.phonenumbers; -import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata; -import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection; +import com.google.i18n.phonenumbers.nano.Phonemetadata.PhoneMetadata; +import com.google.i18n.phonenumbers.nano.Phonemetadata.PhoneMetadataCollection; +import com.google.protobuf.nano.CodedInputByteBufferNano; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; @@ -71,16 +71,35 @@ class MetadataManager { } } + // The size of the byte buffer used for deserializing the alternate formats and short number + // metadata files for each region. + private static final int BUFFER_SIZE = 16 * 1024; + + static CodedInputByteBufferNano convertStreamToByteBuffer(ObjectInputStream in, int bufferSize) + throws IOException { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + int nRead; + byte[] data = new byte[bufferSize]; + + while ((nRead = in.read(data, 0, bufferSize)) != -1) { + outputStream.write(data, 0, nRead); + } + + outputStream.flush(); + return CodedInputByteBufferNano.newInstance(outputStream.toByteArray()); + } + private static void loadAlternateFormatsMetadataFromFile(int countryCallingCode) { InputStream source = PhoneNumberMatcher.class.getResourceAsStream( ALTERNATE_FORMATS_FILE_PREFIX + "_" + countryCallingCode); ObjectInputStream in = null; try { in = new ObjectInputStream(source); + CodedInputByteBufferNano byteBuffer = convertStreamToByteBuffer(in, BUFFER_SIZE); PhoneMetadataCollection alternateFormats = new PhoneMetadataCollection(); - alternateFormats.readExternal(in); - for (PhoneMetadata metadata : alternateFormats.getMetadataList()) { - callingCodeToAlternateFormatsMap.put(metadata.getCountryCode(), metadata); + alternateFormats.mergeFrom(byteBuffer); + for (PhoneMetadata metadata : alternateFormats.metadata) { + callingCodeToAlternateFormatsMap.put(metadata.countryCode, metadata); } } catch (IOException e) { LOGGER.log(Level.WARNING, e.toString()); @@ -107,9 +126,10 @@ class MetadataManager { ObjectInputStream in = null; try { in = new ObjectInputStream(source); + CodedInputByteBufferNano byteBuffer = convertStreamToByteBuffer(in, BUFFER_SIZE); PhoneMetadataCollection shortNumberMetadata = new PhoneMetadataCollection(); - shortNumberMetadata.readExternal(in); - for (PhoneMetadata metadata : shortNumberMetadata.getMetadataList()) { + shortNumberMetadata.mergeFrom(byteBuffer); + for (PhoneMetadata metadata : shortNumberMetadata.metadata) { regionCodeToShortNumberMetadataMap.put(regionCode, metadata); } } catch (IOException e) { |