Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / Base64Encoder.cs / 1 / Base64Encoder.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System.Text; using System.Diagnostics; namespace System.Xml { internal abstract class Base64Encoder { byte[] leftOverBytes; int leftOverBytesCount; char[] charsLine; internal const int Base64LineSize = 76; internal const int LineSizeInBytes = Base64LineSize/4*3; internal Base64Encoder() { charsLine = new char[Base64LineSize]; } internal abstract void WriteChars( char[] chars, int index, int count ); internal void Encode( byte[] buffer, int index, int count ) { if ( buffer == null ) { throw new ArgumentNullException( "buffer" ); } if ( index < 0 ) { throw new ArgumentOutOfRangeException( "index" ); } if ( count < 0 ) { throw new ArgumentOutOfRangeException( "count" ); } if ( count > buffer.Length - index ) { throw new ArgumentOutOfRangeException( "count" ); } // encode left-over buffer if( leftOverBytesCount > 0 ) { int i = leftOverBytesCount; while ( i < 3 && count > 0 ) { leftOverBytes[i++] = buffer[index++]; count--; } // the total number of buffer we have is less than 3 -> return if ( count == 0 && i < 3 ) { leftOverBytesCount = i; return; } // encode the left-over buffer and write out int leftOverChars = Convert.ToBase64CharArray( leftOverBytes, 0, 3, charsLine, 0 ); WriteChars( charsLine, 0, leftOverChars ); } // store new left-over buffer leftOverBytesCount = count % 3; if ( leftOverBytesCount > 0 ) { count -= leftOverBytesCount; if ( leftOverBytes == null ) { leftOverBytes = new byte[3]; } for( int i = 0; i < leftOverBytesCount; i++ ) { leftOverBytes[i] = buffer[ index + count + i ]; } } // encode buffer in 76 character long chunks int endIndex = index + count; int chunkSize = LineSizeInBytes; while( index < endIndex ) { if ( index + chunkSize > endIndex ) { chunkSize = endIndex - index; } int charCount = Convert.ToBase64CharArray( buffer, index, chunkSize, charsLine, 0 ); WriteChars( charsLine, 0, charCount ); index += chunkSize; } } internal void Flush() { if ( leftOverBytesCount > 0 ) { int leftOverChars = Convert.ToBase64CharArray( leftOverBytes, 0, leftOverBytesCount, charsLine, 0 ); WriteChars( charsLine, 0, leftOverChars ); leftOverBytesCount = 0; } } } internal class XmlRawWriterBase64Encoder : Base64Encoder { XmlRawWriter rawWriter; internal XmlRawWriterBase64Encoder( XmlRawWriter rawWriter ) { this.rawWriter = rawWriter; } internal override void WriteChars( char[] chars, int index, int count ) { rawWriter.WriteRaw( chars, index, count ); } } internal class XmlTextWriterBase64Encoder : Base64Encoder { XmlTextEncoder xmlTextEncoder; internal XmlTextWriterBase64Encoder( XmlTextEncoder xmlTextEncoder ) { this.xmlTextEncoder = xmlTextEncoder; } internal override void WriteChars( char[] chars, int index, int count ) { xmlTextEncoder.WriteRaw( chars, index, count ); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TextContainer.cs
- MethodExpr.cs
- HttpRequestContext.cs
- SiteMapHierarchicalDataSourceView.cs
- Span.cs
- ListCardsInFileRequest.cs
- ServiceContractGenerationContext.cs
- storagemappingitemcollection.viewdictionary.cs
- AttributeData.cs
- DrawingCollection.cs
- BinaryObjectWriter.cs
- MessageQueuePermission.cs
- XmlTextAttribute.cs
- CompareInfo.cs
- FormClosingEvent.cs
- IdentitySection.cs
- CancellationTokenSource.cs
- ResizingMessageFilter.cs
- OuterGlowBitmapEffect.cs
- IndexerNameAttribute.cs
- XmlHierarchyData.cs
- FontInfo.cs
- DescendantQuery.cs
- BooleanToVisibilityConverter.cs
- SecurityTokenException.cs
- WebServiceAttribute.cs
- CurrentTimeZone.cs
- PageHandlerFactory.cs
- DbDataReader.cs
- FtpWebResponse.cs
- ObjectDataSourceView.cs
- StatusBarDrawItemEvent.cs
- ToolStripTemplateNode.cs
- PermissionSet.cs
- APCustomTypeDescriptor.cs
- DecoratedNameAttribute.cs
- ArrayTypeMismatchException.cs
- DataServiceConfiguration.cs
- RawStylusInputReport.cs
- DefaultPropertyAttribute.cs
- UnSafeCharBuffer.cs
- Events.cs
- JsonSerializer.cs
- ErrorEventArgs.cs
- FlowDocumentPage.cs
- CharConverter.cs
- ErrorWrapper.cs
- SqlUserDefinedTypeAttribute.cs
- ToolStripDesignerUtils.cs
- HttpCookiesSection.cs
- WebPartAuthorizationEventArgs.cs
- SQLDateTimeStorage.cs
- HMACSHA256.cs
- CharacterBufferReference.cs
- CategoryGridEntry.cs
- WindowsEditBox.cs
- QilChoice.cs
- KnownBoxes.cs
- SessionStateModule.cs
- DataGridItemCollection.cs
- DelegatingTypeDescriptionProvider.cs
- IncomingWebRequestContext.cs
- QueryableFilterUserControl.cs
- util.cs
- ListItemsCollectionEditor.cs
- DataGridViewComponentPropertyGridSite.cs
- EntityClientCacheKey.cs
- DataControlFieldCell.cs
- TextFormatterImp.cs
- DataGridViewTextBoxColumn.cs
- Tile.cs
- CacheChildrenQuery.cs
- MenuCommand.cs
- CommandManager.cs
- FullTextState.cs
- TextSpanModifier.cs
- CheckBoxStandardAdapter.cs
- Keyboard.cs
- SubordinateTransaction.cs
- StructuredType.cs
- HierarchicalDataBoundControl.cs
- TableProviderWrapper.cs
- TrustDriver.cs
- ListViewItemSelectionChangedEvent.cs
- TraceProvider.cs
- AttachedPropertyMethodSelector.cs
- ReceiveMessageContent.cs
- AssemblyNameProxy.cs
- ModifierKeysConverter.cs
- SqlDataAdapter.cs
- SimpleType.cs
- FreezableCollection.cs
- FontCacheLogic.cs
- NavigatorInput.cs
- UntypedNullExpression.cs
- XamlRtfConverter.cs
- ExpressionBindingCollection.cs
- XmlNodeWriter.cs
- FileDialogCustomPlaces.cs
- Mutex.cs