JavaTM Platform
Standard Ed. 6

javax.activation
类 DataHandler

java.lang.Object
  继承者 javax.activation.DataHandler
所有已实现的接口:
Transferable

public class DataHandler
extends Object
implements Transferable

DataHandler 类为在多种不同源和格式下可用的数据提供一致的接口。它使用 DataContentHandler 管理简单流到字符串的转换以及相关操作。它提供对能够操作数据的命令的访问。使用 CommandMap 可以找到这些命令。

DataHandler 和 Transferable 接口

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

DataHandler 和 CommandMap

DataHandler 跟踪当前 CommandMap,它用于命令(getCommandgetAllCommandsgetPreferredCommands)的服务请求。使用 setCommandMap 方法,DataHandler 的每个实例都可以有一个与其相关的 CommandMap。如果没有设置 CommandMap,则 DataHandler 调用 CommandMap 中的 getDefaultCommandMap 方法,并使用其返回值。有关更多信息,请参见 CommandMap

DataHandler 和 URL

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

从以下版本开始:
1.6
另请参见:
CommandMap, DataContentHandler, DataSource, URLDataSource

构造方法摘要
DataHandler(DataSource ds)
          创建引用指定 DataSource 的 DataHandler 实例。
DataHandler(Object obj, String mimeType)
          创建表示此 MIME 类型对象的 DataHandler 实例。
DataHandler(URL url)
          创建引用 URL 的 DataHandler 实例。
 
方法摘要
 CommandInfo[] getAllCommands()
          返回此数据类型的所有命令。
 Object getBean(CommandInfo cmdinfo)
          一个便捷方法,它接受 CommandInfo 对象并且实例化相应的命令,通常是 JavaBean 组件。
 CommandInfo getCommand(String cmdName)
          获取命令 cmdName
 Object getContent()
          以其首选 Object 的形式返回数据。
 String getContentType()
          返回从源对象中获取的此对象的 MIME 类型。
 DataSource getDataSource()
          返回与此 DataHandler 实例关联的 DataSource。
 InputStream getInputStream()
          获取此对象的 InputSteam。
 String getName()
          返回数据对象的名称。
 OutputStream getOutputStream()
          获取此 DataHandler 的 OutputStream,以允许重写底层数据。
 CommandInfo[] getPreferredCommands()
          返回此数据类型的首选 命令。
 Object getTransferData(DataFlavor flavor)
          返回一个对象,该对象表示要传输的数据。
 DataFlavor[] getTransferDataFlavors()
          返回此数据在其中可用的 DataFlavor。
 boolean isDataFlavorSupported(DataFlavor flavor)
          返回此对象是否支持指定的数据 flavor。
 void setCommandMap(CommandMap commandMap)
          设置此 DataHandler 使用的 CommandMap。
static void setDataContentHandlerFactory(DataContentHandlerFactory newFactory)
          设置 DataContentHandlerFactory。
 void writeTo(OutputStream os)
          将数据写入 OutputStream
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

DataHandler

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

参数:
ds - DataSource

DataHandler

public DataHandler(Object obj,
                   String mimeType)
创建表示此 MIME 类型对象的 DataHandler 实例。当应用程序已经有 Java Object 形式的数据内存表示形式 (in-memory representation) 时,使用此构造方法。

参数:
obj - Java Object
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。对于没有用 DataSource 实例化的 DataHandler,为其创建的 DataSource 将被缓存,以提高性能。

返回:
对此 DataHandler 有效的 DataSource 对象

getName

public String getName()
返回数据对象的名称。如果此 DataHandler 是用 DataSource 创建的,则此方法直接调用 DataSource.getName 方法;否则返回 null

返回:
对象的名称

getContentType

public String getContentType()
返回从源对象中获取的此对象的 MIME 类型。注意,这是带有参数的完整 类型。

返回:
MIME 类型

getInputStream

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

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

对于用 Object 实例化的 DataHandler,该 DataHandler 首先尝试找到 Object 的 DataContentHandler。如果 DataHandler 找不到此 MIME 类型的 DataContentHandler,则抛出 UnsupportedDataTypeException。如果能够找到,则它将创建一个管道和一个线程。该线程使用 DataContentHandler 的 writeTo 方法将流数据写入管道的一端。管道的另一端返回给调用者。由于为复制数据创建了一个线程,所以在复制过程中发生的 IOException 不能传送回调用者。结果将是一个空流。

返回:
表示此数据的 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 是用 Object 创建的,则 writeTo 获取对象类型的 DataContentHandler。如果找到了 DataContentHandler,则它对 DataContentHandler 调用 writeTo 方法。

参数:
os - 要写入的 OutputStream
抛出:
IOException - 如果发生 I/O 错误

getOutputStream

public OutputStream getOutputStream()
                             throws IOException
获取此 DataHandler 的 OutputStream,以允许重写底层数据。如果 DataHandler 是用 DataSource 创建的,则调用 DataSource 的 getOutputStream 方法。否则,返回 null

返回:
OutputStream
抛出:
IOException
另请参见:
DataSource.getOutputStream(), URLDataSource

getTransferDataFlavors

public DataFlavor[] getTransferDataFlavors()
返回此数据在其中可用的 DataFlavor。

返回能够提供数据的 flavor 的 DataFlavor 对象所组成的数组。该数组通常根据提供数据的首选项来排序(从描述最多的到描述最少的)。

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

如果 能找到 DataContentHandler,并且 DataHandler 是用 DataSource (或 URL)创建的,则返回一个表示此对象 MIME 类型和 java.io.InputStream 类的 DataFlavor。如果 DataHandler 是用对象和 MIME 类型创建的,则 getTransferDataFlavors 返回一个表示此对象 MIME 类型和对象类的 DataFlavor。

指定者:
接口 Transferable 中的 getTransferDataFlavors
返回:
其中可以传输此数据的数据 flavor 所组成的数组
另请参见:
DataContentHandler.getTransferDataFlavors()

isDataFlavorSupported

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

此方法迭代 getTransferDataFlavors 返回的 DataFlavor,将每个 DataFlavor 与指定 flavor 进行比较。

指定者:
接口 Transferable 中的 isDataFlavorSupported
参数:
flavor - 为数据所请求的 flavor
返回:
如果支持该数据 flavor,则返回 true
另请参见:
getTransferDataFlavors()

getTransferData

public Object getTransferData(DataFlavor flavor)
                       throws UnsupportedFlavorException,
                              IOException
返回一个对象,该对象表示要传输的数据。返回对象的类是由该数据 flavor 的表示形式类定义的。

对于用 DataSource 或 URL 创建的 DataHandler:

DataHandler 尝试为此 MIME 类型查找一个 DataContentHandler。如果找到,则将传入的 DataFlavor 和数据的类型传递给其 getTransferData 方法。如果 DataHandler 没有找到 DataContentHandler,并且 flavor 指定了此对象的 MIME 类型和 java.io.InputStream 类,则返回此对象的 InputStream。否则,抛出 UnsupportedFlavorException。

对于用 Object 创建的 DataHandler:

DataHandler 尝试为此 MIME 类型查找一个 DataContentHandler。如果找到,则将传入的 DataFlavor 和数据的类型传递给其 getTransferData 方法。如果 DataHandler 没有找到 DataContentHandler,并且 flavor 指定了此对象的 MIME 类型和它的类,则返回此 DataHandler 的引用对象。否则,抛出 UnsupportedFlavorException。

指定者:
接口 Transferable 中的 getTransferData
参数:
flavor - 为数据所请求的 flavor
返回:
对象
抛出:
UnsupportedFlavorException - 如果不能将该数据转换为所请求的 flavor
IOException - 如果发生 I/O 错误
另请参见:
ActivationDataFlavor

setCommandMap

public void setCommandMap(CommandMap commandMap)
设置此 DataHandler 使用的 CommandMap。将其设置为 null 会使该 CommandMap 还原为 CommandMap.getDefaultCommandMap 方法所返回的 CommandMap。更改该 CommandMap 或将其设置为 null 将清除以前的 CommandMap 所缓存的所有数据。

参数:
commandMap - 此 DataHandler 中使用的 CommandMap
另请参见:
CommandMap.setDefaultCommandMap(javax.activation.CommandMap)

getPreferredCommands

public CommandInfo[] getPreferredCommands()
返回此数据类型的首选 命令。此方法调用 CommandMap 中与此 DataHandler 实例关联的 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
以其首选 Object 的形式返回数据。

如果 DataHandler 是用一个对象实例化的,则返回该对象。

如果 DataHandler 是用 DataSource 实例化的,则此方法使用 DataContentHandler 返回此 DataHandler 所表示数据的内容对象。如果找不到此数据类型的 DataContentHandler,则 DataHandler 返回数据的 InputStream。

返回:
内容。
抛出:
IOException - 如果此操作中发生 IOException。

getBean

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

此方法调用 CommandInfo 的 getCommandObject 方法,带有用于加载 javax.activation.DataHandler 类本身的 ClassLoader

参数:
cmdinfo - 与命令对应的 CommandInfo
返回:
已实例化的命令对象

setDataContentHandlerFactory

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

如果 DataContentHandlerFactory 已经被设置,则此方法抛出 Error。

参数:
newFactory - DataContentHandlerFactory
抛出:
Error - 如果工厂已经被定义。
另请参见:
DataContentHandlerFactory

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策