检测twitter4j的关闭流

时间:2013-06-21 09:26:26

标签: java twitter4j

我正在使用twitter4j开发一个应用程序。我使用DAO将推文存储在一个文件中。

我实现了StatusListener类:

public class StatusListenerStore implements StatusListener {

    // DAO
    private DAO<Status> m_statusDAO;


    // Constructor
    public StatusListenerStore(FactoryType a_factoryType,ArrayList<String> a_lanTrackList) {

        super();
        AbstractDAOFactory l_DAOFactory = AbstractDAOFactory.getFactory(a_factoryType);
        m_statusDAO = l_DAOFactory.getTweetDAO();

    }
}

呼叫的DAO是:

// Extract of my class
private static HadoopFileSystem m_hadoopFileSystem = null;

public TweetHADOOPDAO(){
    m_hadoopFileSystem = new HadoopFileSystem(m_path+m_filename);
}

public void close(){
    m_hadoopFileSystem.closeWriters();
}

HadoopFileSystem包含OutputStream我必须关闭。

首先,我只想为我的所有程序提供一个HadoopFileSystem对象实例。 static关键字保证我吗?

接下来,要关闭我的输出流,我必须在流完成后调用DAO类中的close函数。我使用正确的shutdown()函数关闭它。

m_statusDAO对象是在我的StatusListener类中声明的。当流关闭时,如何在此类中调用close()函数?

1 个答案:

答案 0 :(得分:1)

static关键字表示m_hadoopFileSystem变量将由该类的所有实例共享,但不会阻止您多次分配变量。目前,每次实例化HadoopFileSystem对象时,您将获得一个新的TweetHADOOPDAO,覆盖对任何现有HadoopFileSystem对象的引用。

如果您确实需要确保只创建一个实例,请查看using the singleton pattern

关于你的第二点,不幸的是我认为没有关闭事件。但是,您可以向侦听器添加shutdown()方法,该方法会调用TweetHADOOPDAO#close()

然后,您可以在调用StatusListenerStore#shutdown()后再拨打TwitterSteam#shutdown()