1 // Licensed to the Apache Software Foundation (ASF) under one or more 2 // contributor license agreements. See the NOTICE file distributed with 3 // this work for additional information regarding copyright ownership. 4 // The ASF licenses this file to You under the Apache License, Version 2.0 5 // (the "License"); you may not use this file except in compliance with 6 // the License. You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 16 using Apache.Arrow.Memory; 17 using System.IO; 18 using System.Threading; 19 using System.Threading.Tasks; 20 21 namespace Apache.Arrow.Ipc 22 { 23 /// <summary> 24 /// Implements an <see cref="ArrowStreamReader"/> that can read Arrow files. 25 /// </summary> 26 public class ArrowFileReader : ArrowStreamReader 27 { 28 private ArrowFileReaderImplementation Implementation => 29 (ArrowFileReaderImplementation)_implementation; 30 31 public bool IsFileValid => Implementation.IsFileValid; 32 ArrowFileReader(Stream stream)33 public ArrowFileReader(Stream stream) 34 : this(stream, leaveOpen: false) 35 { 36 } 37 ArrowFileReader(Stream stream, MemoryAllocator allocator)38 public ArrowFileReader(Stream stream, MemoryAllocator allocator) 39 : this(stream, allocator, leaveOpen: false) 40 { 41 } 42 ArrowFileReader(Stream stream, bool leaveOpen)43 public ArrowFileReader(Stream stream, bool leaveOpen) 44 : this(stream, allocator: null, leaveOpen) 45 { 46 } 47 ArrowFileReader(Stream stream, MemoryAllocator allocator, bool leaveOpen)48 public ArrowFileReader(Stream stream, MemoryAllocator allocator, bool leaveOpen) 49 : base(new ArrowFileReaderImplementation(stream, allocator, leaveOpen)) 50 { 51 } 52 FromFile(string filename)53 public static ArrowFileReader FromFile(string filename) 54 { 55 var stream = new FileStream(filename, FileMode.Open, FileAccess.Read); 56 return new ArrowFileReader(stream); 57 } 58 RecordBatchCountAsync()59 public ValueTask<int> RecordBatchCountAsync() 60 { 61 return Implementation.RecordBatchCountAsync(); 62 } 63 ReadRecordBatchAsync(int index, CancellationToken cancellationToken = default)64 public ValueTask<RecordBatch> ReadRecordBatchAsync(int index, CancellationToken cancellationToken = default) 65 { 66 return Implementation.ReadRecordBatchAsync(index, cancellationToken); 67 } 68 } 69 } 70