summaryrefslogtreecommitdiff
path: root/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java
diff options
context:
space:
mode:
authorPaul Duffin <paulduffin@google.com>2015-12-07 15:54:05 +0000
committerPaul Duffin <paulduffin@google.com>2015-12-11 07:43:01 +0000
commit6b489f77ae70bea07f3a8fbd877368b4e0f3142c (patch)
tree795d2abf37f433cd1ebcd759b81b1b2fc0bf4d54 /libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java
parentabeb971bf494d4d67b68dea4b83e737724682d1b (diff)
downloadlibphonenumber-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.java38
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) {