diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java b/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
index bd44c7b..af62c60 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
@@ -27,8 +27,6 @@
 import com.google.common.io.CharSource;
 import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -102,11 +100,6 @@
     return new Builder();
   }
 
-  public static ClassNameMapper mapperFromInputStream(InputStream in) throws IOException {
-    return mapperFromBufferedReader(
-        new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)), null);
-  }
-
   public static ClassNameMapper mapperFromFile(Path path) throws IOException {
     return mapperFromFile(path, MISSING_FILE_IS_ERROR);
   }
@@ -119,7 +112,7 @@
         && !path.toFile().exists()) {
       return mapperFromString("");
     }
-    return mapperFromInputStream(Files.newInputStream(path));
+    return mapperFromBufferedReader(Files.newBufferedReader(path, StandardCharsets.UTF_8), null);
   }
 
   public static ClassNameMapper mapperFromString(String contents) throws IOException {
@@ -144,7 +137,7 @@
     return mapperFromBufferedReader(reader, diagnosticsHandler, false);
   }
 
-  private static ClassNameMapper mapperFromBufferedReader(
+  public static ClassNameMapper mapperFromBufferedReader(
       BufferedReader reader, DiagnosticsHandler diagnosticsHandler, boolean allowEmptyMappedRanges)
       throws IOException {
     try (ProguardMapReader proguardReader =
diff --git a/src/main/java/com/android/tools/r8/retrace/ProguardMapProducer.java b/src/main/java/com/android/tools/r8/retrace/ProguardMapProducer.java
index 7e66ed3..81b7f30 100644
--- a/src/main/java/com/android/tools/r8/retrace/ProguardMapProducer.java
+++ b/src/main/java/com/android/tools/r8/retrace/ProguardMapProducer.java
@@ -5,26 +5,24 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.Keep;
-import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.Reader;
+import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
 
 /** Interface for producing a string format of a mapping file. */
 @Keep
 public interface ProguardMapProducer {
 
-  String get() throws IOException;
+  Reader get() throws IOException;
 
-  static ProguardMapProducer fromReader(Reader reader) {
-    return () -> {
-      try (BufferedReader br = new BufferedReader(reader)) {
-        StringBuilder sb = new StringBuilder();
-        String line;
-        while ((line = br.readLine()) != null) {
-          sb.append(line).append('\n');
-        }
-        return sb.toString();
-      }
-    };
+  static ProguardMapProducer fromString(String proguardMapString) {
+    return () -> new StringReader(proguardMapString);
+  }
+
+  static ProguardMapProducer fromPath(Path path) {
+    return () -> Files.newBufferedReader(path, StandardCharsets.UTF_8);
   }
 }
diff --git a/src/main/java/com/android/tools/r8/retrace/Retrace.java b/src/main/java/com/android/tools/r8/retrace/Retrace.java
index 813ae66..71d88c3 100644
--- a/src/main/java/com/android/tools/r8/retrace/Retrace.java
+++ b/src/main/java/com/android/tools/r8/retrace/Retrace.java
@@ -123,15 +123,7 @@
           new StringDiagnostic(String.format("Could not find mapping file '%s'.", mappingPath)));
       throw new RetraceAbortException();
     }
-    return () -> {
-      try {
-        return new String(Files.readAllBytes(path));
-      } catch (IOException e) {
-        diagnosticsHandler.error(
-            new StringDiagnostic(String.format("Could not open mapping file '%s'.", mappingPath)));
-        throw new RuntimeException(e);
-      }
-    };
+    return ProguardMapProducer.fromPath(Paths.get(mappingPath));
   }
 
   private static List<String> getStackTraceFromFile(
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/DirectClassNameMapperProguardMapProducer.java b/src/main/java/com/android/tools/r8/retrace/internal/DirectClassNameMapperProguardMapProducer.java
index db73155..b243ff5 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/DirectClassNameMapperProguardMapProducer.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/DirectClassNameMapperProguardMapProducer.java
@@ -6,13 +6,14 @@
 
 import com.android.tools.r8.naming.ClassNameMapper;
 import com.android.tools.r8.retrace.ProguardMapProducer;
+import java.io.BufferedReader;
 
 public interface DirectClassNameMapperProguardMapProducer extends ProguardMapProducer {
 
   ClassNameMapper getClassNameMapper();
 
   @Override
-  default String get() {
+  default BufferedReader get() {
     throw new RuntimeException("Should not be called for DirectClassNameMapperProguardMapProducer");
   }
 }
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetracerImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetracerImpl.java
index d25afab..03f515b 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetracerImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetracerImpl.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.retrace.InvalidMappingFileException;
 import com.android.tools.r8.retrace.ProguardMapProducer;
 import com.android.tools.r8.retrace.Retracer;
+import java.io.BufferedReader;
 
 /** A default implementation for the retrace api using the ClassNameMapper defined in R8. */
 public class RetracerImpl implements Retracer {
@@ -32,7 +33,8 @@
     }
     try {
       ClassNameMapper classNameMapper =
-          ClassNameMapper.mapperFromString(proguardMapProducer.get(), diagnosticsHandler, true);
+          ClassNameMapper.mapperFromBufferedReader(
+              new BufferedReader(proguardMapProducer.get()), diagnosticsHandler, true);
       return new RetracerImpl(classNameMapper);
     } catch (Throwable throwable) {
       throw new InvalidMappingFileException(throwable);
diff --git a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
index f2660ef..b385fd6 100644
--- a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
+++ b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
@@ -24,6 +24,7 @@
 import com.android.tools.r8.TestRuntime;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.ToolHelper.ProcessResult;
+import com.android.tools.r8.retrace.ProguardMapProducer;
 import com.android.tools.r8.retrace.Retrace;
 import com.android.tools.r8.retrace.RetraceCommand;
 import com.android.tools.r8.utils.FileUtils;
@@ -146,17 +147,7 @@
     RetraceCommand retraceCommand =
         RetraceCommand.builder()
             .setStackTrace(StringUtils.splitLines(processResult.stderr))
-            .setProguardMapProducer(
-                () -> {
-                  Path mappingFile = r8R8Release.getSecond();
-                  try {
-                    return new String(Files.readAllBytes(mappingFile));
-                  } catch (IOException e) {
-                    e.printStackTrace();
-                    throw new RuntimeException(
-                        "Could not read mapping file " + mappingFile.toString());
-                  }
-                })
+            .setProguardMapProducer(ProguardMapProducer.fromPath(r8R8Release.getSecond()))
             .setRetracedStackTraceConsumer(
                 retraced -> {
                   int expectedIndex = -1;
diff --git a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
index 949b787..441fd68 100644
--- a/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/internal/retrace/RetraceTests.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.internal.retrace.stacktraces.CronetStackTrace;
 import com.android.tools.r8.internal.retrace.stacktraces.FinskyStackTrace;
 import com.android.tools.r8.internal.retrace.stacktraces.VelvetStackTrace;
+import com.android.tools.r8.retrace.ProguardMapProducer;
 import com.android.tools.r8.retrace.Retrace;
 import com.android.tools.r8.retrace.RetraceCommand;
 import com.android.tools.r8.retrace.stacktraces.StackTraceForTest;
@@ -183,7 +184,7 @@
     TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
     RetraceCommand retraceCommand =
         RetraceCommand.builder(diagnosticsHandler)
-            .setProguardMapProducer(stackTraceForTest::mapping)
+            .setProguardMapProducer(ProguardMapProducer.fromString(stackTraceForTest.mapping()))
             .setStackTrace(stackTraceForTest.obfuscatedStackTrace())
             .setRegularExpression(regularExpression)
             .setRetracedStackTraceConsumer(
diff --git a/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java b/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
index 34d84c4..74eeed2 100644
--- a/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
+++ b/src/test/java/com/android/tools/r8/naming/retrace/StackTrace.java
@@ -11,6 +11,7 @@
 import com.android.tools.r8.SingleTestRunResult;
 import com.android.tools.r8.ToolHelper.DexVm;
 import com.android.tools.r8.references.ClassReference;
+import com.android.tools.r8.retrace.ProguardMapProducer;
 import com.android.tools.r8.retrace.Retrace;
 import com.android.tools.r8.retrace.RetraceCommand;
 import com.android.tools.r8.utils.StringUtils;
@@ -311,7 +312,7 @@
     Box box = new Box();
     Retrace.run(
         RetraceCommand.builder()
-            .setProguardMapProducer(() -> map)
+            .setProguardMapProducer(ProguardMapProducer.fromString(map))
             .setStackTrace(
                 stackTraceLines.stream()
                     .map(line -> line.originalLine)
diff --git a/src/test/java/com/android/tools/r8/retrace/DuplicateMappingsTest.java b/src/test/java/com/android/tools/r8/retrace/DuplicateMappingsTest.java
index bbe2d5b..22fcef4 100644
--- a/src/test/java/com/android/tools/r8/retrace/DuplicateMappingsTest.java
+++ b/src/test/java/com/android/tools/r8/retrace/DuplicateMappingsTest.java
@@ -40,12 +40,12 @@
     Retrace.run(
         RetraceCommand.builder(diagnosticsHandler)
             .setProguardMapProducer(
-                () ->
+                ProguardMapProducer.fromString(
                     StringUtils.lines(
                         "com.android.tools.r8.retrace.SourceFileTest$ClassWithCustomFileName ->"
                             + " com.android.tools.r8.retrace.a:",
                         "# {'id':'sourceFile','fileName':'foobarbaz.java'}",
-                        "# {'id':'sourceFile','fileName':'foobarbaz2.java'}"))
+                        "# {'id':'sourceFile','fileName':'foobarbaz2.java'}")))
             .setStackTrace(ImmutableList.of())
             .setRetracedStackTraceConsumer(
                 strings -> {
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java
index 3ff24fa..e07b776 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceFieldTests.java
@@ -20,6 +20,8 @@
 
   private void runRetraceTest(MappingForTest mappingForTest, Consumer<Retracer> inspection) {
     inspection.accept(
-        Retracer.createDefault(mappingForTest::mapping, new TestDiagnosticMessagesImpl()));
+        Retracer.createDefault(
+            ProguardMapProducer.fromString(mappingForTest.mapping()),
+            new TestDiagnosticMessagesImpl()));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
index 84bc19c..22d4f15 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceTests.java
@@ -120,7 +120,7 @@
     NullStackTrace nullStackTrace = new NullStackTrace();
     RetraceCommand retraceCommand =
         RetraceCommand.builder(diagnosticsHandler)
-            .setProguardMapProducer(nullStackTrace::mapping)
+            .setProguardMapProducer(ProguardMapProducer.fromString(nullStackTrace.mapping()))
             .setStackTrace(nullStackTrace.obfuscatedStackTrace())
             .setRetracedStackTraceConsumer(retraced -> fail())
             .build();
@@ -257,7 +257,9 @@
   private void inspectRetraceTest(
       StackTraceForTest stackTraceForTest, Consumer<Retracer> inspection) {
     inspection.accept(
-        Retracer.createDefault(stackTraceForTest::mapping, new TestDiagnosticMessagesImpl()));
+        Retracer.createDefault(
+            ProguardMapProducer.fromString(stackTraceForTest.mapping()),
+            new TestDiagnosticMessagesImpl()));
   }
 
   private TestDiagnosticMessagesImpl runRetraceTest(StackTraceForTest stackTraceForTest)
@@ -298,7 +300,7 @@
       TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
       RetraceCommand retraceCommand =
           RetraceCommand.builder(diagnosticsHandler)
-              .setProguardMapProducer(stackTraceForTest::mapping)
+              .setProguardMapProducer(ProguardMapProducer.fromString(stackTraceForTest.mapping()))
               .setStackTrace(stackTraceForTest.obfuscatedStackTrace())
               .setRegularExpression(useRegExpParsing ? DEFAULT_REGULAR_EXPRESSION : null)
               .setRetracedStackTraceConsumer(
diff --git a/src/test/java/com/android/tools/r8/retrace/RetraceVerboseTests.java b/src/test/java/com/android/tools/r8/retrace/RetraceVerboseTests.java
index d217689..bcca0af 100644
--- a/src/test/java/com/android/tools/r8/retrace/RetraceVerboseTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/RetraceVerboseTests.java
@@ -63,7 +63,7 @@
     TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
     RetraceCommand retraceCommand =
         RetraceCommand.builder(diagnosticsHandler)
-            .setProguardMapProducer(stackTraceForTest::mapping)
+            .setProguardMapProducer(ProguardMapProducer.fromString(stackTraceForTest.mapping()))
             .setStackTrace(stackTraceForTest.obfuscatedStackTrace())
             .setRegularExpression(useRegExpParsing ? DEFAULT_REGULAR_EXPRESSION : null)
             .setVerbose(true)
diff --git a/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java b/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
index 333cc9f..40ec50f 100644
--- a/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
+++ b/src/test/java/com/android/tools/r8/retrace/StackTraceRegularExpressionParserTests.java
@@ -805,7 +805,7 @@
     TestDiagnosticMessagesImpl diagnosticsHandler = new TestDiagnosticMessagesImpl();
     RetraceCommand retraceCommand =
         RetraceCommand.builder(diagnosticsHandler)
-            .setProguardMapProducer(stackTraceForTest::mapping)
+            .setProguardMapProducer(ProguardMapProducer.fromString(stackTraceForTest.mapping()))
             .setStackTrace(stackTraceForTest.obfuscatedStackTrace())
             .setRetracedStackTraceConsumer(
                 retraced -> {
