www.gusucode.com > bigdata 工具箱 matlab源码程序 > bigdata/+matlab/+bigdata/+internal/+io/MatArrayWriter.m
classdef MatArrayWriter < matlab.bigdata.internal.io.Writer & matlab.mixin.Copyable %MATARRAYWRITER A write to add tall data to disk. % MatArrayWriter Methods: % add - Add array values to MAT-Files % % See also datastore, tall, mapreduce. % Copyright 2016 The MathWorks, Inc. properties (SetAccess = immutable) % Buffer to hold on to arrays added. ArrayBuffer; % Serializer used to serialize data to MAT-Files. Serializer; end properties (Constant, Access = private) OUTPUT_FILE_PREFIX = 'array'; OUTPUT_FILE_SUFFIX = 'snapshot'; end methods function obj = MatArrayWriter(arrayIdx, location, optionalMidfix) if nargin < 3 optionalMidfix = ''; end prefix = [matlab.bigdata.internal.io.MatArrayWriter.OUTPUT_FILE_PREFIX, optionalMidfix, ... sprintf('_r%i', arrayIdx)]; obj.ArrayBuffer = matlab.mapreduce.internal.ValueBuffer; obj.Serializer = matlab.mapreduce.internal.MatValueSerializer(... prefix, location, matlab.bigdata.internal.io.MatArrayWriter.OUTPUT_FILE_SUFFIX); end function add(obj, value) append(obj.ArrayBuffer, {value}); if serialize(obj.Serializer,... obj.ArrayBuffer.Buffer, obj.ArrayBuffer.BytesUsed, ... obj.ArrayBuffer.SizeBuffered) % If serialized the buffer, make the buffer empty obj.ArrayBuffer.initialize(); end end function commit(obj) % If any of the buffer has values, serialize them if numel(obj.ArrayBuffer.Buffer) > 0 serialize(obj.Serializer,... obj.ArrayBuffer.Buffer, inf, ... obj.ArrayBuffer.SizeBuffered); end end end end