Module  java.activation
软件包  javax.activation

Class DataHandler

  • All Implemented Interfaces:
    Transferable


    public class DataHandler
    extends Object
    implements Transferable
    DataHandler类为许多不同来源和格式的数据提供了一致的界面。 它使用DataContentHandlers管理简单的流到字符串转换和相关操作。 它提供对可以对数据操作的命令的访问。 命令是使用CommandMap找到的。

    DataHandler和可传输接口

    DataHandler实现了可传输接口,以便数据可用于AWT数据传输操作,如剪切和粘贴和拖放。 Transferable接口的实现依赖于与DataHandler的特定实例中表示的数据的MIME类型相对应的已安装DataContentHandler对象的可用性。

    DataHandler和CommandMaps

    DataHandler跟踪当前用于为命令请求( getCommand, getAllCommands, getPreferredCommands )提供服务的CommandMap。 DataHandler的每个实例可能使用与其相关联的CommandMap,使用setCommandMap方法。 如果没有设置CommandMap,DataHandler会在CommandMap中调用getDefaultCommandMap方法,并使用它返回的值。 有关详细信息,请参阅CommandMap

    DataHandler和URL

    当使用URL构造时,当前的DataHandler实现创建一个URLDataSource的私有实例。

    从以下版本开始:
    1.6
    另请参见:
    CommandMapDataContentHandlerDataSourceURLDataSource
    • 构造方法详细信息

      • DataHandler

        public DataHandler​(DataSource ds)
        创建引用指定的DataSource的DataHandler实例。 数据以字节流形式存在。 DataSource将提供一个InputStream来访问数据。
        参数
        ds - DataSource
      • DataHandler

        public DataHandler​(Object obj,
                           String mimeType)
        创建一个表示此MIME类型对象的DataHandler实例。 当应用程序已经具有Java对象形式的数据的内存中表示时,将使用此构造函数。
        参数
        obj - Java对象
        mimeType - 对象的MIME类型
      • DataHandler

        public DataHandler​(URL url)
        创建引用URL的DataHandler实例。 DataHandler内部创建一个URLDataSource实例来表示URL。
        参数
        url - 一个URL对象
    • 方法详细信息

      • getDataSource

        public DataSource getDataSource​()
        返回与此DataHandler实例关联的DataSource。

        对于已使用DataSource实例化的DataHandler,此方法返回用于创建DataHandler对象的DataSource。 在其他情况下,DataHandler根据用于构造DataHandler的数据构建DataSource。 为DataHandler创建的DataSource 实例化DataSource为缓存高性能的原因。

        结果
        此DataHandler的有效DataSource对象
      • getName

        public String getName​()
        返回数据对象的名称。 如果此DataHandler是使用DataSource创建的,则此方法调用到DataSource.getName方法,否则返回null
        结果
        对象的名称
      • getContentType

        public String getContentType​()
        返回从源对象检索的此对象的MIME类型。 请注意,这是具有参数的完整类型。
        结果
        MIME类型
      • getInputStream

        public InputStream getInputStream​()
                                   throws IOException
        获取此对象的InputStream。

        对于使用DataSource实例化的DataHandler,DataHandler调用DataSource.getInputStream方法并将结果返回给调用者。

        对于使用Object实例化的DataHandler,DataHandler首先尝试为对象找到一个DataContentHandler。 如果DataHandler找不到此MIME类型的DataContentHandler,则会引发UnsupportedDataTypeException。 如果成功,它将创建一个管道和一个线程。 线程使用DataContentHandler的writeTo方法将流数据写入管道的一端。 管道的另一端返回给调用者。 由于创建线程以复制数据,因此在复制期间可能发生的IOExceptions不能传播回调用者。 结果是一个空的流。

        结果
        InputStream表示此数据
        异常
        IOException - 如果发生I / O错误
        另请参见:
        DataContentHandler.writeTo(java.lang.Object, java.lang.String, java.io.OutputStream)UnsupportedDataTypeException
      • writeTo

        public void writeTo​(OutputStream os)
                     throws IOException
        将数据写入OutputStream

        如果DataHandler是使用DataSource创建的,writeTo将检索InputStream,并将InputStream中的字节复制到传入的OutputStream。

        如果DataHandler是使用对象创建的,writeTo将检索对象类型的DataContentHandler。 如果的DataContentHandler被发现,它调用writeTo的方法DataContentHandler

        参数
        os - 要写入的OutputStream
        异常
        IOException - 如果发生I / O错误
      • getOutputStream

        public OutputStream getOutputStream​()
                                     throws IOException
        获取此DataHandler的OutputStream以允许覆盖底层数据。 如果DataHandler是使用DataSource创建的,则调用DataSource的getOutputStream方法。 否则返回null
        结果
        OutputStream
        异常
        IOException - 创建OutputStream的失败
        另请参见:
        DataSource.getOutputStream()URLDataSource
      • getTransferDataFlavors

        public DataFlavor[] getTransferDataFlavors​()
        返回此数据可用的DataFlavors。

        返回一个DataFlavor对象数组,表示可以提供数据的风格。数组通常根据提供数据的偏好进行排序,从最丰富的描述到最不丰富的描述。

        DataHandler尝试查找与数据的MIME类型相对应的DataContentHandler。 如果找到,DataHandler会调用DataContentHandler的getTransferDataFlavors方法。

        如果无法找到DataContentHandler,并且如果使用DataSource(或URL)创建了DataHandler,则会返回一个表示此对象的MIME类型和java.io.InputStream类的java.io.InputStream 如果使用对象和MIME类型创建了DataHandler,那么getTransferDataFlavors将返回一个表示此对象的MIME类型和对象类的DataFlavor。

        Specified by:
        getTransferDataFlavors在接口 Transferable
        结果
        一系列可以传输此数据的数据风格
        另请参见:
        DataContentHandler.getTransferDataFlavors()
      • isDataFlavorSupported

        public boolean isDataFlavorSupported​(DataFlavor flavor)
        返回此对象是否支持指定的数据flavor。

        该方法遍历从getTransferDataFlavors返回的DataFlavors,将每个与指定的风味进行比较。

        Specified by:
        isDataFlavorSupported在接口 Transferable
        参数
        flavor - 要求的数据风味
        结果
        如果支持数据风格,则为true
        另请参见:
        getTransferDataFlavors()
      • getTransferData

        public Object getTransferData​(DataFlavor flavor)
                               throws UnsupportedFlavorException,
                                      IOException
        返回表示要传输的数据的对象。 返回的对象的类由数据风格的表示类定义。

        对于使用DataSources或URL创建的DataHandler:

        DataHandler尝试为此MIME类型定位DataContentHandler。 如果找到,则将DataFlavor中传递的数据和数据类型传递给其getTransferData方法。 如果DataHandler无法找到DataContentHandler,并且flavor指定此对象的MIME类型和java.io.InputStream类,则返回此对象的InputStream。 否则会引发UnsupportedFlavorException。

        对于使用对象创建的DataHandler:

        DataHandler尝试为此MIME类型定位DataContentHandler。 如果找到,则DataFlavor中传递的数据和数据类型将传递给其getTransferData方法。 如果DataHandler找不到DataContentHandler,并且flavor指定此对象的MIME类型及其类,则会返回此DataHandler的引用对象。 否则会引发UnsupportedFlavorException。

        Specified by:
        getTransferData在接口 Transferable
        参数
        flavor - 要求的数据风味
        结果
        物体
        异常
        UnsupportedFlavorException - 如果数据无法转换为请求的风味
        IOException - 如果发生I / O错误
        另请参见:
        ActivationDataFlavor
      • setCommandMap

        public void setCommandMap​(CommandMap commandMap)
        设置CommandMap以供DataHandler使用。 将其设置为null会导致CommandMap恢复为CommandMap.getDefaultCommandMap方法返回的CommandMap。 更改CommandMap或将其设置为null ,将清除从上一个CommandMap缓存的任何数据。
        参数
        commandMap - 要在此DataHandler中使用的CommandMap
        另请参见:
        CommandMap.setDefaultCommandMap(javax.activation.CommandMap)
      • getPreferredCommands

        public CommandInfo[] getPreferredCommands​()
        返回此类型数据的首选命令。 该方法调用与此DataHandler实例相关联的CommandMap中的getPreferredCommands方法。 此方法返回一个表示可用命令子集的数组。 在存在由DataHandler表示的MIME类型的多个命令的情况下,安装的CommandMap将选择相应的命令。
        结果
        表示首选命令的CommandInfo对象
        另请参见:
        CommandMap.getPreferredCommands(java.lang.String)
      • getAllCommands

        public CommandInfo[] getAllCommands​()
        返回此类型数据的所有命令。 此方法返回一个包含此DataHandler表示的数据类型的所有命令的数组。 此DataHandler表示的底层数据的MIME类型用于调用与此DataHandler关联的CommandMap的getAllCommands方法。
        结果
        表示所有命令的CommandInfo对象
        另请参见:
        CommandMap.getAllCommands(java.lang.String)
      • getCommand

        public CommandInfo getCommand​(String cmdName)
        获取命令cmdName 使用由DataHandler中安装的CommandMap定义的搜索语义。 此DataHandler表示的底层数据的MIME类型用于调用与此DataHandler关联的CommandMap的getCommand方法。
        参数
        cmdName - 命令名
        结果
        CommandInfo对应的命令
        另请参见:
        CommandMap.getCommand(java.lang.String, java.lang.String)
      • getContent

        public Object getContent​()
                          throws IOException
        以其首选对象形式返回数据。

        如果使用对象实例化了DataHandler,则返回该对象。

        如果DataHandler用DataSource实例化,则此方法使用DataContentHandler返回此DataHandler表示的数据的内容对象。 如果没有找到DataContentHandler数据类型,那么DataHandler将为数据返回一个InputStream。

        结果
        内容。
        异常
        IOException - 如果在此操作期间发生IOException。
      • getBean

        public Object getBean​(CommandInfo cmdinfo)
        一个方便的方法,它接受CommandInfo对象并实例化相应的命令,通常是一个JavaBean组件。

        这种方法调用了CommandInfo的getCommandObject方法,其中ClassLoader用于加载javax.activation.DataHandler类。

        参数
        cmdinfo - 与命令对应的CommandInfo
        结果
        实例化的命令对象
      • setDataContentHandlerFactory

        public static void setDataContentHandlerFactory​(DataContentHandlerFactory newFactory)
        设置DataContentHandlerFactory。 首先调用DataContentHandlerFactory来查找DataContentHandlers。 DataContentHandlerFactory只能设置一次。

        如果DataContentHandlerFactory已经被设置,这个方法会抛出一个错误。

        参数
        newFactory - DataContentHandlerFactory
        异常
        Error - 如果工厂已经定义。
        另请参见:
        DataContentHandlerFactory