|
1 | | -// Copyright (c) BootstrapBlazor & Argo Zhang (argo@live.ca). All rights reserved. |
| 1 | +// Copyright (c) BootstrapBlazor & Argo Zhang (argo@live.ca). All rights reserved. |
2 | 2 | // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. |
3 | 3 | // Website: https://www.blazor.zone or https://argozhang.github.io/ |
4 | 4 |
|
5 | | -using System.Text; |
| 5 | +using System.Buffers; |
6 | 6 |
|
7 | 7 | namespace BootstrapBlazor.CssBundler; |
8 | 8 |
|
@@ -58,21 +58,42 @@ static void DoBundler(string bundlerFile, BundlerOptions option) |
58 | 58 | return; |
59 | 59 | } |
60 | 60 |
|
61 | | - using var writer = File.OpenWrite(Path.Combine(rootFolder, option.OutputFileName)); |
62 | | - foreach (var file in option.InputFiles) |
| 61 | + var buffer = ArrayPool<byte>.Shared.Rent(64 * 1024 * 1024); |
| 62 | + try |
63 | 63 | { |
64 | | - var inputFile = Path.Combine(rootFolder, file); |
65 | | - if (!File.Exists(inputFile)) |
| 64 | + using var writer = File.OpenWrite(Path.Combine(rootFolder, option.OutputFileName)); |
| 65 | + foreach (var file in option.InputFiles) |
66 | 66 | { |
67 | | - continue; |
68 | | - } |
| 67 | + var inputFile = Path.Combine(rootFolder, file); |
| 68 | + if (!File.Exists(inputFile)) |
| 69 | + { |
| 70 | + continue; |
| 71 | + } |
| 72 | + |
| 73 | + using var reader = File.OpenRead(inputFile); |
| 74 | + while (true) |
| 75 | + { |
| 76 | + var read = reader.Read(buffer, 0, buffer.Length); |
| 77 | + if (read == 0) |
| 78 | + { |
| 79 | + break; |
| 80 | + } |
69 | 81 |
|
70 | | - using var reader = File.OpenText(inputFile); |
71 | | - var content = reader.ReadToEnd(); |
72 | | - writer.Write(Encoding.UTF8.GetBytes(content)); |
73 | | - reader.Close(); |
| 82 | + if (reader.Position == read && read >= 3 && buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF) |
| 83 | + { |
| 84 | + // skip bom |
| 85 | + writer.Write(buffer, 3, read - 3); |
| 86 | + continue; |
| 87 | + } |
| 88 | + writer.Write(buffer, 0, read); |
| 89 | + } |
| 90 | + } |
| 91 | + writer.Close(); |
| 92 | + } |
| 93 | + finally |
| 94 | + { |
| 95 | + ArrayPool<byte>.Shared.Return(buffer); |
74 | 96 | } |
75 | | - writer.Close(); |
76 | 97 |
|
77 | 98 | Console.WriteLine($"Bundler Completed .... {option.OutputFileName}"); |
78 | 99 | } |
|
0 commit comments