Skip to content

Commit e9565be

Browse files
authored
Use built in stream copy when available (#338)
1 parent 08e9024 commit e9565be

File tree

5 files changed

+38
-27
lines changed

5 files changed

+38
-27
lines changed

DocumentFormat.OpenXml/DocumentFormat.OpenXml.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@
6060
<Compile Include="System\Collections\Generic\IReadOnlyCollection.cs" />
6161
<Compile Include="System\Reflection\TypeExtensions.cs" />
6262
</ItemGroup>
63+
64+
<ItemGroup Condition=" '$(TargetFramework)' == 'net35' ">
65+
<Compile Include="System\IO\StreamCopyExtensions.cs" />
66+
</ItemGroup>
6367
</When>
6468

6569
<When Condition=" '$(TargetFramework)' == 'net46' ">

DocumentFormat.OpenXml/Packaging/DataPart.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public void FeedData(Stream sourceStream)
156156

157157
using (Stream targetStream = this.GetStream(FileMode.Create))
158158
{
159-
OpenXmlPart.CopyStream(sourceStream, targetStream);
159+
sourceStream.CopyTo(targetStream);
160160
}
161161
}
162162

DocumentFormat.OpenXml/Packaging/OpenXmlBasePart.cs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ public void FeedData(Stream sourceStream)
398398

399399
using (Stream targetStream = this.GetStream(FileMode.Create))
400400
{
401-
CopyStream(sourceStream, targetStream);
401+
sourceStream.CopyTo(targetStream);
402402
}
403403
}
404404

@@ -845,30 +845,6 @@ internal sealed override PackageRelationship CreateRelationship(Uri targetUri, T
845845

846846
#endregion
847847

848-
#region private methods
849-
internal static void CopyStream(Stream sourceStream, Stream targetStream)
850-
{
851-
if (sourceStream == null)
852-
{
853-
throw new ArgumentNullException(nameof(sourceStream));
854-
}
855-
856-
using (BinaryReader sourceReader = new BinaryReader(sourceStream))
857-
{
858-
byte[] buffer = new byte[4096];
859-
860-
int num = 0;
861-
do
862-
{
863-
num = sourceReader.Read(buffer, 0, 4096);
864-
if (num > 0)
865-
targetStream.Write(buffer, 0, num);
866-
}
867-
while (num > 0);
868-
}
869-
}
870-
#endregion
871-
872848
#region MC Staffs
873849
internal MarkupCompatibilityProcessSettings MCSettings;
874850
#endregion

DocumentFormat.OpenXml/Packaging/OpenXmlPackage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -949,7 +949,7 @@ internal void ChangeDocumentTypeInternal<T>() where T : OpenXmlPart
949949
throw new OpenXmlPackageException(ExceptionMessages.DocumentTooBig);
950950
}
951951
memoryStream = new MemoryStream(Convert.ToInt32(mainPartStream.Length));
952-
OpenXmlPart.CopyStream(mainPartStream, memoryStream);
952+
mainPartStream.CopyTo(memoryStream);
953953
}
954954

955955
//
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) Microsoft. All rights reserved.
2+
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
3+
4+
namespace System.IO
5+
{
6+
internal static class StreamCopyExtensions
7+
{
8+
public static void CopyTo(this Stream source, Stream destination)
9+
{
10+
const int BufferSize = 4096;
11+
12+
if (source == null)
13+
{
14+
throw new ArgumentNullException(nameof(source));
15+
}
16+
17+
if (destination == null)
18+
{
19+
throw new ArgumentNullException(nameof(destination));
20+
}
21+
22+
var buffer = new byte[BufferSize];
23+
int bytesRead;
24+
25+
while ((bytesRead = source.Read(buffer, 0, BufferSize)) > 0)
26+
{
27+
destination.Write(buffer, 0, bytesRead);
28+
}
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)