diff --git a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
index 4be22e6..f83852b 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
@@ -92,8 +92,7 @@
 }
 
 size_t CPDF_PageContentManager::AddStream(fxcrt::ostringstream* buf) {
-  auto new_stream = document_->NewIndirect<CPDF_Stream>();
-  new_stream->SetDataFromStringstream(buf);
+  auto new_stream = document_->NewIndirect<CPDF_Stream>(buf);
 
   // If there is one Content stream (not in an array), now there will be two, so
   // create an array with the old and the new one. The new one's index is 1.
@@ -146,8 +145,7 @@
   }
 
   if (GetContentsStream()) {
-    auto new_stream = document_->NewIndirect<CPDF_Stream>();
-    new_stream->SetDataFromStringstream(buf);
+    auto new_stream = document_->NewIndirect<CPDF_Stream>(buf);
     RetainPtr<CPDF_Dictionary> page_dict = page_obj_holder_->GetMutableDict();
     page_dict->SetNewFor<CPDF_Reference>("Contents", document_,
                                          new_stream->GetObjNum());
@@ -164,8 +162,7 @@
     return;
   }
 
-  auto new_stream = document_->NewIndirect<CPDF_Stream>();
-  new_stream->SetDataFromStringstream(buf);
+  auto new_stream = document_->NewIndirect<CPDF_Stream>(buf);
   stream_reference->SetRef(document_, new_stream->GetObjNum());
 }
 
diff --git a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
index 7a3015d..a9441ce 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
+++ b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
@@ -65,24 +65,21 @@
   {
     static constexpr uint8_t kInput1[] =
         "beginbfrange<FFFFFFFF><FFFFFFFF>[<0041>]endbfrange";
-    auto stream = pdfium::MakeRetain<CPDF_Stream>();
-    stream->SetData(pdfium::make_span(kInput1));
+    auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput1));
     CPDF_ToUnicodeMap map(stream);
     EXPECT_STREQ(L"A", map.Lookup(0xffffffff).c_str());
   }
   {
     static constexpr uint8_t kInput2[] =
         "beginbfrange<FFFFFFFF><FFFFFFFF><0042>endbfrange";
-    auto stream = pdfium::MakeRetain<CPDF_Stream>();
-    stream->SetData(pdfium::make_span(kInput2));
+    auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput2));
     CPDF_ToUnicodeMap map(stream);
     EXPECT_STREQ(L"B", map.Lookup(0xffffffff).c_str());
   }
   {
     static constexpr uint8_t kInput3[] =
         "beginbfrange<FFFFFFFF><FFFFFFFF><00410042>endbfrange";
-    auto stream = pdfium::MakeRetain<CPDF_Stream>();
-    stream->SetData(pdfium::make_span(kInput3));
+    auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput3));
     CPDF_ToUnicodeMap map(stream);
     EXPECT_STREQ(L"AB", map.Lookup(0xffffffff).c_str());
   }
@@ -93,8 +90,7 @@
     // Both the CIDs and the unicodes are different.
     static constexpr uint8_t kInput1[] =
         "beginbfchar<1><0041><2><0042>endbfchar";
-    auto stream = pdfium::MakeRetain<CPDF_Stream>();
-    stream->SetData(pdfium::make_span(kInput1));
+    auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput1));
     CPDF_ToUnicodeMap map(stream);
     EXPECT_EQ(1u, map.ReverseLookup(0x0041));
     EXPECT_EQ(2u, map.ReverseLookup(0x0042));
@@ -105,8 +101,7 @@
     // The same CID with different unicodes.
     static constexpr uint8_t kInput2[] =
         "beginbfrange<0><0><0041><0><0><0042>endbfrange";
-    auto stream = pdfium::MakeRetain<CPDF_Stream>();
-    stream->SetData(pdfium::make_span(kInput2));
+    auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput2));
     CPDF_ToUnicodeMap map(stream);
     EXPECT_EQ(0u, map.ReverseLookup(0x0041));
     EXPECT_EQ(0u, map.ReverseLookup(0x0042));
@@ -118,8 +113,7 @@
     static constexpr uint8_t kInput3[] =
         "beginbfrange<0><0>[<0041>]endbfrange\n"
         "beginbfchar<0><0041>endbfchar";
-    auto stream = pdfium::MakeRetain<CPDF_Stream>();
-    stream->SetData(pdfium::make_span(kInput3));
+    auto stream = pdfium::MakeRetain<CPDF_Stream>(pdfium::make_span(kInput3));
     CPDF_ToUnicodeMap map(stream);
     EXPECT_EQ(0u, map.ReverseLookup(0x0041));
     EXPECT_EQ(1u, map.GetUnicodeCountByCharcodeForTesting(0u));
diff --git a/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp b/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp
index 4bd3d85..68fbbe7 100644
--- a/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_seekablemultistream_unittest.cpp
@@ -9,7 +9,6 @@
 
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
-#include "core/fxcrt/data_vector.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 TEST(CPDFSeekableMultiStreamTest, NoStreams) {
@@ -44,15 +43,9 @@
   ByteStringView one_view(kOne);
   ByteStringView two_view(kTwo);
   ByteStringView three_view(kThree);
-  auto stream1 = pdfium::MakeRetain<CPDF_Stream>(
-      DataVector<uint8_t>(one_view.begin(), one_view.end()),
-      pdfium::MakeRetain<CPDF_Dictionary>());
-  auto stream2 = pdfium::MakeRetain<CPDF_Stream>(
-      DataVector<uint8_t>(two_view.begin(), two_view.end()),
-      pdfium::MakeRetain<CPDF_Dictionary>());
-  auto stream3 = pdfium::MakeRetain<CPDF_Stream>(
-      DataVector<uint8_t>(three_view.begin(), three_view.end()),
-      pdfium::MakeRetain<CPDF_Dictionary>());
+  auto stream1 = pdfium::MakeRetain<CPDF_Stream>(one_view.raw_span());
+  auto stream2 = pdfium::MakeRetain<CPDF_Stream>(two_view.raw_span());
+  auto stream3 = pdfium::MakeRetain<CPDF_Stream>(three_view.raw_span());
 
   std::vector<RetainPtr<const CPDF_Stream>> streams;
   streams.push_back(std::move(stream1));
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index fa08ffa..a21d6c6 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -38,12 +38,29 @@
 
 CPDF_Stream::CPDF_Stream() = default;
 
-CPDF_Stream::CPDF_Stream(RetainPtr<CPDF_Dictionary> pDict)
-    : CPDF_Stream(DataVector<uint8_t>(), std::move(pDict)) {}
+CPDF_Stream::CPDF_Stream(RetainPtr<CPDF_Dictionary> dict)
+    : CPDF_Stream(DataVector<uint8_t>(), std::move(dict)) {}
 
-CPDF_Stream::CPDF_Stream(DataVector<uint8_t> pData,
-                         RetainPtr<CPDF_Dictionary> pDict)
-    : data_(std::move(pData)), dict_(std::move(pDict)) {
+CPDF_Stream::CPDF_Stream(pdfium::span<const uint8_t> span)
+    : dict_(pdfium::MakeRetain<CPDF_Dictionary>()) {
+  SetData(span);
+}
+
+CPDF_Stream::CPDF_Stream(fxcrt::ostringstream* stream)
+    : dict_(pdfium::MakeRetain<CPDF_Dictionary>()) {
+  SetDataFromStringstream(stream);
+}
+
+CPDF_Stream::CPDF_Stream(RetainPtr<IFX_SeekableReadStream> file,
+                         RetainPtr<CPDF_Dictionary> dict)
+    : data_(std::move(file)), dict_(std::move(dict)) {
+  SetLengthInDict(pdfium::base::checked_cast<int>(
+      absl::get<RetainPtr<IFX_SeekableReadStream>>(data_)->GetSize()));
+}
+
+CPDF_Stream::CPDF_Stream(DataVector<uint8_t> data,
+                         RetainPtr<CPDF_Dictionary> dict)
+    : data_(std::move(data)), dict_(std::move(dict)) {
   SetLengthInDict(pdfium::base::checked_cast<int>(
       absl::get<DataVector<uint8_t>>(data_).size()));
 }
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index f1bb78b..314992e 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -75,10 +75,23 @@
   // Uninitialized.
   CPDF_Stream();
 
-  // Initializes with empty data.
-  explicit CPDF_Stream(RetainPtr<CPDF_Dictionary> pDict);
+  // Initializes with empty data and /Length set to 0 in `dict`.
+  // If `dict` is null, then a new dictionary will be created instead.
+  explicit CPDF_Stream(RetainPtr<CPDF_Dictionary> dict);
 
-  CPDF_Stream(DataVector<uint8_t> pData, RetainPtr<CPDF_Dictionary> pDict);
+  // Copies `span` and `stream`, respectively. Creates a new dictionary with the
+  // /Length set.
+  explicit CPDF_Stream(pdfium::span<const uint8_t> span);
+  explicit CPDF_Stream(fxcrt::ostringstream* stream);
+
+  // Reads data from `file`. `dict` will have its /Length set based on `file`.
+  // If `dict` is null, then a new dictionary will be created instead.
+  CPDF_Stream(RetainPtr<IFX_SeekableReadStream> file,
+              RetainPtr<CPDF_Dictionary> dict);
+
+  // Takes `data`.
+  // If `dict` is null, then a new dictionary will be created instead.
+  CPDF_Stream(DataVector<uint8_t> data, RetainPtr<CPDF_Dictionary> dict);
   ~CPDF_Stream() override;
 
   const CPDF_Dictionary* GetDictInternal() const override;
diff --git a/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp b/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
index 4821dc5..caf7c95 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_stream_acc_unittest.cpp
@@ -14,8 +14,7 @@
 #include "testing/invalid_seekable_read_stream.h"
 
 TEST(StreamAccTest, ReadRawDataFailed) {
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->InitStreamFromFile(
+  auto stream = pdfium::MakeRetain<CPDF_Stream>(
       pdfium::MakeRetain<InvalidSeekableReadStream>(1024),
       pdfium::MakeRetain<CPDF_Dictionary>());
   auto stream_acc = pdfium::MakeRetain<CPDF_StreamAcc>(std::move(stream));
@@ -27,8 +26,7 @@
 // failure with UnownedPtr.
 TEST(StreamAccTest, DataStreamLifeTime) {
   constexpr uint8_t kData[] = {'a', 'b', 'c'};
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(kData);
+  auto stream = pdfium::MakeRetain<CPDF_Stream>(kData);
   auto stream_acc = pdfium::MakeRetain<CPDF_StreamAcc>(stream);
   stream_acc->LoadAllDataRaw();
   stream.Reset();
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index defaa06..7b35697 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -785,11 +785,11 @@
     }
   }
 
-  RetainPtr<CPDF_Stream> pStream;
+  RetainPtr<CPDF_Stream> stream;
   if (substream) {
     // It is unclear from CPDF_SyntaxParser's perspective what object
     // `substream` is ultimately holding references to. To avoid unexpectedly
-    // changing object lifetimes by handing `substream` to `pStream`, make a
+    // changing object lifetimes by handing `substream` to `stream`, make a
     // copy of the data here.
     auto data = FixedSizeDataVector<uint8_t>::Uninit(substream->GetSize());
     bool did_read = substream->ReadBlockAtOffset(data.span(), 0);
@@ -797,11 +797,11 @@
     auto data_as_stream =
         pdfium::MakeRetain<CFX_ReadOnlyVectorStream>(std::move(data));
 
-    pStream = pdfium::MakeRetain<CPDF_Stream>();
-    pStream->InitStreamFromFile(std::move(data_as_stream), std::move(pDict));
+    stream = pdfium::MakeRetain<CPDF_Stream>(std::move(data_as_stream),
+                                             std::move(pDict));
   } else {
     DCHECK(!len);
-    pStream = pdfium::MakeRetain<CPDF_Stream>(std::move(pDict));
+    stream = pdfium::MakeRetain<CPDF_Stream>(std::move(pDict));
   }
   const FX_FILESIZE end_stream_offset = GetPos();
   memset(m_WordBuffer, 0, kEndObjStr.GetLength() + 1);
@@ -821,7 +821,7 @@
       memcmp(m_WordBuffer, kEndObjStr.raw_str(), kEndObjStr.GetLength()) == 0) {
     SetPos(end_stream_offset);
   }
-  return pStream;
+  return stream;
 }
 
 uint32_t CPDF_SyntaxParser::GetDirectNum() {
diff --git a/core/fpdfdoc/cpdf_filespec_unittest.cpp b/core/fpdfdoc/cpdf_filespec_unittest.cpp
index e898076..48eaa8a 100644
--- a/core/fpdfdoc/cpdf_filespec_unittest.cpp
+++ b/core/fpdfdoc/cpdf_filespec_unittest.cpp
@@ -16,7 +16,6 @@
 #include "core/fpdfapi/parser/cpdf_reference.h"
 #include "core/fpdfapi/parser/cpdf_stream.h"
 #include "core/fpdfapi/parser/cpdf_string.h"
-#include "core/fxcrt/data_vector.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/test_support.h"
 
@@ -176,10 +175,9 @@
       dict_obj->SetNewFor<CPDF_String>(keys[i], file_name);
 
       // Set the file stream.
-      size_t buf_len = strlen(streams[i]) + 1;
-      auto stream_object = object_holder.NewIndirect<CPDF_Stream>(
-          DataVector<uint8_t>(streams[i], streams[i] + buf_len),
-          pdfium::MakeRetain<CPDF_Dictionary>());
+      auto stream_object =
+          object_holder.NewIndirect<CPDF_Stream>(pdfium::as_bytes(
+              pdfium::make_span(streams[i], strlen(streams[i]) + 1)));
       ASSERT_TRUE(stream_object);
       const uint32_t stream_object_number = stream_object->GetObjNum();
       ASSERT_GT(stream_object_number, 0u);
@@ -219,9 +217,8 @@
     // Add a file stream to the embedded files dictionary.
     RetainPtr<CPDF_Dictionary> file_dict = dict_obj->GetMutableDictFor("EF");
     static constexpr char kHello[] = "hello";
-    auto stream_object = object_holder.NewIndirect<CPDF_Stream>(
-        DataVector<uint8_t>(std::begin(kHello), std::end(kHello)),
-        pdfium::MakeRetain<CPDF_Dictionary>());
+    auto stream_object =
+        object_holder.NewIndirect<CPDF_Stream>(pdfium::as_byte_span(kHello));
     ASSERT_TRUE(stream_object);
     const uint32_t stream_object_number = stream_object->GetObjNum();
     ASSERT_GT(stream_object_number, 0u);
diff --git a/core/fpdfdoc/cpdf_metadata_unittest.cpp b/core/fpdfdoc/cpdf_metadata_unittest.cpp
index 4bd30ed..0618fba 100644
--- a/core/fpdfdoc/cpdf_metadata_unittest.cpp
+++ b/core/fpdfdoc/cpdf_metadata_unittest.cpp
@@ -15,8 +15,8 @@
       "<adhocwf:version>1.1</adhocwf:version>\n"
       "</node>";
 
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(ByteStringView(data).raw_span());
+  auto stream =
+      pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -32,8 +32,8 @@
       "<adhocwf:version>1.1</adhocwf:version>\n"
       "</node>";
 
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(ByteStringView(data).raw_span());
+  auto stream =
+      pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -49,8 +49,8 @@
       "<adhocwf:version>1.1</adhocwf:version>\n"
       "</node>";
 
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(ByteStringView(data).raw_span());
+  auto stream =
+      pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -66,8 +66,8 @@
       "<adhocwf:version>1.1</adhocwf:version>\n"
       "</node>";
 
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(ByteStringView(data).raw_span());
+  auto stream =
+      pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -84,8 +84,8 @@
       "</node>"
       "</parent></grandparent>";
 
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(ByteStringView(data).raw_span());
+  auto stream =
+      pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -98,8 +98,8 @@
       "<?xml charset=\"utf-8\"?>\n"
       "<node></node>";
 
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(ByteStringView(data).raw_span());
+  auto stream =
+      pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -131,8 +131,8 @@
       "</node>"
       "</parent>";
 
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(ByteStringView(kData).raw_span());
+  auto stream =
+      pdfium::MakeRetain<CPDF_Stream>(ByteStringView(kData).raw_span());
   CPDF_Metadata metadata(stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -147,8 +147,8 @@
       "<adhocwf:version>1.1</adhocwf:version>\n"
       "</node>";
 
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(ByteStringView(data).raw_span());
+  auto stream =
+      pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(stream);
 
   auto results = metadata.CheckForSharedForm();
@@ -177,8 +177,8 @@
       "</node3>"
       "</grandparent>";
 
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(ByteStringView(data).raw_span());
+  auto stream =
+      pdfium::MakeRetain<CPDF_Stream>(ByteStringView(data).raw_span());
   CPDF_Metadata metadata(stream);
 
   auto results = metadata.CheckForSharedForm();
diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp
index ee8212a..90476e0 100644
--- a/fpdfsdk/fpdf_edittext.cpp
+++ b/fpdfsdk/fpdf_edittext.cpp
@@ -125,15 +125,14 @@
   pFontDesc->SetNewFor<CPDF_Number>("CapHeight", pFont->GetAscent());
   pFontDesc->SetNewFor<CPDF_Number>("StemV", pFont->IsBold() ? 120 : 70);
 
-  auto pStream = pDoc->NewIndirect<CPDF_Stream>();
-  pStream->SetData(span);
+  auto stream = pDoc->NewIndirect<CPDF_Stream>(span);
   // TODO(npm): Lengths for Type1 fonts.
   if (font_type == FPDF_FONT_TRUETYPE) {
-    pStream->GetMutableDict()->SetNewFor<CPDF_Number>(
+    stream->GetMutableDict()->SetNewFor<CPDF_Number>(
         "Length1", static_cast<int>(span.size()));
   }
   ByteString fontFile = font_type == FPDF_FONT_TYPE1 ? "FontFile" : "FontFile2";
-  pFontDesc->SetNewFor<CPDF_Reference>(fontFile, pDoc, pStream->GetObjNum());
+  pFontDesc->SetNewFor<CPDF_Reference>(fontFile, pDoc, stream->GetObjNum());
   return pFontDesc;
 }
 
@@ -289,8 +288,7 @@
   buffer << "endbfrange\n";
   buffer << ToUnicodeEnd;
   // TODO(npm): Encrypt / Compress?
-  auto stream = pDoc->NewIndirect<CPDF_Stream>();
-  stream->SetDataFromStringstream(&buffer);
+  auto stream = pDoc->NewIndirect<CPDF_Stream>(&buffer);
   return stream;
 }
 
diff --git a/fpdfsdk/fpdf_save.cpp b/fpdfsdk/fpdf_save.cpp
index 37a1905..0d771d2 100644
--- a/fpdfsdk/fpdf_save.cpp
+++ b/fpdfsdk/fpdf_save.cpp
@@ -111,18 +111,18 @@
         pdfium::MakeRetain<CFX_MemoryStream>();
     if (pContext->SaveDatasetsPackage(pFileWrite) &&
         pFileWrite->GetSize() > 0) {
-      auto pDataDict = pPDFDocument->New<CPDF_Dictionary>();
       if (iDataSetsIndex != -1) {
         if (pDataSetsStream) {
-          pDataSetsStream->InitStreamFromFile(pFileWrite, std::move(pDataDict));
+          pDataSetsStream->InitStreamFromFile(
+              pFileWrite, pPDFDocument->New<CPDF_Dictionary>());
         }
       } else {
-        auto pData = pPDFDocument->NewIndirect<CPDF_Stream>();
-        pData->InitStreamFromFile(pFileWrite, std::move(pDataDict));
+        auto data_stream = pPDFDocument->NewIndirect<CPDF_Stream>(
+            pFileWrite, pPDFDocument->New<CPDF_Dictionary>());
         int iLast = fxcrt::CollectionSize<int>(*pArray) - 2;
         pArray->InsertNewAt<CPDF_String>(iLast, "datasets", false);
         pArray->InsertNewAt<CPDF_Reference>(iLast + 1, pPDFDocument,
-                                            pData->GetObjNum());
+                                            data_stream->GetObjNum());
       }
       fileList->push_back(std::move(pFileWrite));
     }
@@ -132,17 +132,18 @@
     RetainPtr<IFX_SeekableStream> pFileWrite =
         pdfium::MakeRetain<CFX_MemoryStream>();
     if (pContext->SaveFormPackage(pFileWrite) && pFileWrite->GetSize() > 0) {
-      auto pDataDict = pPDFDocument->New<CPDF_Dictionary>();
       if (iFormIndex != -1) {
-        if (pFormStream)
-          pFormStream->InitStreamFromFile(pFileWrite, std::move(pDataDict));
+        if (pFormStream) {
+          pFormStream->InitStreamFromFile(pFileWrite,
+                                          pPDFDocument->New<CPDF_Dictionary>());
+        }
       } else {
-        auto pData = pPDFDocument->NewIndirect<CPDF_Stream>();
-        pData->InitStreamFromFile(pFileWrite, std::move(pDataDict));
+        auto data_stream = pPDFDocument->NewIndirect<CPDF_Stream>(
+            pFileWrite, pPDFDocument->New<CPDF_Dictionary>());
         int iLast = fxcrt::CollectionSize<int>(*pArray) - 2;
         pArray->InsertNewAt<CPDF_String>(iLast, "form", false);
         pArray->InsertNewAt<CPDF_Reference>(iLast + 1, pPDFDocument,
-                                            pData->GetObjNum());
+                                            data_stream->GetObjNum());
       }
       fileList->push_back(std::move(pFileWrite));
     }
diff --git a/testing/fuzzers/pdf_cpdf_tounicodemap_fuzzer.cc b/testing/fuzzers/pdf_cpdf_tounicodemap_fuzzer.cc
index 5f18564..9040eff 100644
--- a/testing/fuzzers/pdf_cpdf_tounicodemap_fuzzer.cc
+++ b/testing/fuzzers/pdf_cpdf_tounicodemap_fuzzer.cc
@@ -28,8 +28,7 @@
 
   std::vector<uint8_t> remaining =
       data_provider.ConsumeRemainingBytes<uint8_t>();
-  auto stream = pdfium::MakeRetain<CPDF_Stream>();
-  stream->SetData(remaining);
+  auto stream = pdfium::MakeRetain<CPDF_Stream>(remaining);
 
   auto to_unicode_map = std::make_unique<CPDF_ToUnicodeMap>(std::move(stream));
   to_unicode_map->Lookup(charcode_to_lookup);
