diff --git a/src/com/android/providers/telephony/CarrierIdProvider.java b/src/com/android/providers/telephony/CarrierIdProvider.java
index 3dc1568..a14923e 100644
--- a/src/com/android/providers/telephony/CarrierIdProvider.java
+++ b/src/com/android/providers/telephony/CarrierIdProvider.java
@@ -47,6 +47,8 @@
 import java.util.Arrays;
 import java.util.List;
 
+import libcore.io.IoUtils;
+
 /**
  * This class provides the ability to query the Carrier Identification databases
  * (A.K.A. cid) which is stored in a SQLite database.
@@ -281,16 +283,20 @@
     private void updateFromAssetsIfNeeded(SQLiteDatabase db) {
         //TODO skip update from assets if OTA update is available.
         final File assets;
+        OutputStream outputStream = null;
+        InputStream inputStream = null;
         try {
             // create a temp file to compute check sum.
             assets = new File(getContext().getCacheDir(), ASSETS_PB_FILE);
-            final OutputStream outputStream = new FileOutputStream(assets);
-            final byte[] bytes = readInputStreamToByteArray(
-                    getContext().getAssets().open(ASSETS_PB_FILE));
-            outputStream.write(bytes);
+            outputStream = new FileOutputStream(assets);
+            inputStream = getContext().getAssets().open(ASSETS_PB_FILE);
+            outputStream.write(readInputStreamToByteArray(inputStream));
         } catch (IOException ex) {
             Log.e(TAG, "assets file not found: " + ex);
             return;
+        } finally {
+            IoUtils.closeQuietly(outputStream);
+            IoUtils.closeQuietly(inputStream);
         }
         long checkSum = getChecksum(assets);
         if (checkSum != getAssetsChecksum()) {
@@ -304,8 +310,10 @@
      */
     private void initDatabaseFromPb(File pb, SQLiteDatabase db) {
         Log.d(TAG, "init database from pb file");
+        InputStream inputStream = null;
         try {
-            byte[] bytes = readInputStreamToByteArray(new FileInputStream(pb));
+            inputStream = new FileInputStream(pb);
+            byte[] bytes = readInputStreamToByteArray(inputStream);
             CarrierIdProto.CarrierList carrierList = CarrierIdProto.CarrierList.parseFrom(bytes);
             List<ContentValues> cvs = new ArrayList<>();
             for (CarrierIdProto.CarrierId id : carrierList.carrierId) {
@@ -329,6 +337,8 @@
             }
         } catch (IOException ex) {
             Log.e(TAG, "init database from pb failure: " + ex);
+        } finally {
+            IoUtils.closeQuietly(inputStream);
         }
     }
 
