【问题标题】:Detect closing stream of twitter4j检测 twitter4j 的关闭流
【发布时间】:2013-06-21 09:26:25
【问题描述】:

我正在使用 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 对象实例。静态关键字保证我?

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

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

【问题讨论】:

    标签: java twitter4j


    【解决方案1】:

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

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

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

    那么你可以在调用TwitterSteam#shutdown()之后再调用StatusListenerStore#shutdown()

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 1970-01-01
      • 2023-02-12
      • 2014-10-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      相关资源
      最近更新 更多