All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alipay.rdf.file.common.RawFileReader Maven / Gradle / Ivy

There is a newer version: 2.2.11
Show newest version
package com.alipay.rdf.file.common;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import com.alipay.rdf.file.exception.RdfErrorEnum;
import com.alipay.rdf.file.exception.RdfFileException;
import com.alipay.rdf.file.loader.ProcessorLoader;
import com.alipay.rdf.file.model.FileConfig;
import com.alipay.rdf.file.model.Summary;
import com.alipay.rdf.file.processor.ProcessorTypeEnum;
import com.alipay.rdf.file.spi.RdfFileProcessorSpi;
import com.alipay.rdf.file.spi.RdfFileReaderSpi;
import com.alipay.rdf.file.util.RdfFileLogUtil;
import com.alipay.rdf.file.util.RdfFileUtil;

/**
 * Copyright (C) 2013-2018 Ant Financial Services Group
 * 
 * 原生文件读取
 * 
 * @author hongwei.quhw
 * @version $Id: RawFileReader.java, v 0.1 2017年8月24日 下午5:31:18 hongwei.quhw Exp $
 */
public class RawFileReader implements RdfFileReaderSpi {
    private FileConfig                                        fileConfig;
    private RdfBufferedReader                                 reader;
    private Map> processors;

    @Override
    public void init(FileConfig fileConfig) {
        this.fileConfig = fileConfig;
        processors = ProcessorLoader.loadByType(fileConfig, ProcessorTypeEnum.AFTER_CLOSE_READER,
            ProcessorTypeEnum.AFTER_READ_BYTES);
    }

    @Override
    public  T readHead(Class requiredType) {
        throw new RdfFileException("rdf-file#RawFileWriter.readHead 不支持操作",
            RdfErrorEnum.UNSUPPORTED_OPERATION);
    }

    @SuppressWarnings("unchecked")
    @Override
    public  T readRow(Class requiredType) {
        if (!requiredType.getName().equals(String[].class.getName())) {
            throw new RdfFileException(
                "rdf-file#RawFileReader.readRow 只支持返回String[] 实际requiredType="
                                       + requiredType.getName(),
                RdfErrorEnum.ILLEGAL_ARGUMENT);
        }

        RdfFileUtil.assertNotNull(RdfFileUtil.getRowSplit(fileConfig),
            "rdf-file#RawFileWriter.readRow 没有配置分隔符 不支持操作, fileConfig=" + fileConfig,
            RdfErrorEnum.UNSUPPORTED_OPERATION);

        String line = readLine();
        if (RdfFileUtil.isBlank(line)) {
            return null;
        } else {
            return (T) RdfFileUtil.split(line, RdfFileUtil.getRowSplit(fileConfig));
        }
    }

    @Override
    public  T readTail(Class requiredType) {
        throw new RdfFileException("rdf-file#RawFileWriter.readTail 不支持操作",
            RdfErrorEnum.UNSUPPORTED_OPERATION);
    }

    @Override
    public String readBodyLine() {
        throw new RdfFileException("rdf-file#RawFileWriter.readBodyLine 不支持操作",
            RdfErrorEnum.UNSUPPORTED_OPERATION);
    }

    @Override
    public String readLine() {
        ensureOpen();
        try {
            return reader.readLine();
        } catch (IOException e) {
            throw new RdfFileException("rdf-file#RawFileWriter.writereadLineLine error", e,
                RdfErrorEnum.IO_ERROR);
        }
    }

    @Override
    public Summary getSummary() {
        return null;
    }

    @Override
    public void close() {
        if (null != reader) {
            try {
                reader.close();
            } catch (IOException e) {
                if (RdfFileLogUtil.common.isWarn()) {
                    RdfFileLogUtil.common.warn("rdf-file#RawFileWriter.close() error", e);
                }
            }
        }

        reader = null;
    }

    private void ensureOpen() {
        if (null == reader) {
            reader = IOFactory.createReader(fileConfig, processors);
        }
    }

    @Override
    public FileConfig getFileConfig() {
        return fileConfig;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy