java.lang.Object javax.activation.DataHandler
public class DataHandler
DataHandler 类为在多种不同源和格式下可用的数据提供一致的接口。它使用 DataContentHandler 管理简单流到字符串的转换以及相关操作。它提供对能够操作数据的命令的访问。使用 CommandMap 可以找到这些命令。
DataHandler 和 Transferable 接口
DataHandler 实现 Transferable 接口,以便数据能够用于 AWT 数据传输操作,比如,剪切、粘贴和拖放操作。Transferable 接口的实现依赖于已安装的 DataContentHandler 对象的可用性,该 DataContentHandler 对象与 DataHandler 的特定实例中所表示的数据的 MIME 类型相对应。
DataHandler 和 CommandMap
DataHandler 跟踪当前 CommandMap,它用于命令(getCommand
、getAllCommands
、getPreferredCommands
)的服务请求。使用 setCommandMap
方法,DataHandler 的每个实例都可以有一个与其相关的 CommandMap。如果没有设置 CommandMap,则 DataHandler 调用 CommandMap 中的 getDefaultCommandMap
方法,并使用其返回值。有关更多信息,请参见 CommandMap。
DataHandler 和 URL
当用 URL 构造 DataHandler 时,当前 DataHandler 实现创建一个 URLDataSource 的私有实例。
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 |
构造方法详细信息 |
---|
public DataHandler(DataSource ds)
DataHandler
实例。数据以字节流的形式存在。DataSource 将提供一个 InputStream 来访问数据。
ds
- DataSource
public DataHandler(Object obj, String mimeType)
DataHandler
实例。当应用程序已经有 Java Object 形式的数据内存表示形式 (in-memory representation) 时,使用此构造方法。
obj
- Java Object
mimeType
- 对象的 MIME 类型
public DataHandler(URL url)
DataHandler
实例。DataHandler 在内部创建一个
URLDataSource
实例来表示 URL。
url
- URL 对象
方法详细信息 |
---|
public DataSource getDataSource()
对于已经用 DataSource 实例化的 DataHandler,此方法返回用来创建该 DataHandler 对象的 DataSource。在其他情况下,DataHandler 根据用来构造 DataHandler 的数据构造 DataSource。对于没有用 DataSource 实例化的 DataHandler,为其创建的 DataSource 将被缓存,以提高性能。
public String getName()
DataSource.getName
方法;否则返回
null。
public String getContentType()
public InputStream getInputStream() throws IOException
对于用 DataSource 实例化的 DataHandler,该 DataHandler 调用 DataSource.getInputStream
方法,并将结果返回给调用者。
对于用 Object 实例化的 DataHandler,该 DataHandler 首先尝试找到 Object 的 DataContentHandler。如果 DataHandler 找不到此 MIME 类型的 DataContentHandler,则抛出 UnsupportedDataTypeException。如果能够找到,则它将创建一个管道和一个线程。该线程使用 DataContentHandler 的 writeTo
方法将流数据写入管道的一端。管道的另一端返回给调用者。由于为复制数据创建了一个线程,所以在复制过程中发生的 IOException 不能传送回调用者。结果将是一个空流。
IOException
- 如果发生 I/O 错误
DataContentHandler.writeTo(java.lang.Object, java.lang.String, java.io.OutputStream)
,
UnsupportedDataTypeException
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 错误
public OutputStream getOutputStream() throws IOException
getOutputStream
方法。否则,返回
null
。
IOException
DataSource.getOutputStream()
,
URLDataSource
public DataFlavor[] getTransferDataFlavors()
返回能够提供数据的 flavor 的 DataFlavor 对象所组成的数组。该数组通常根据提供数据的首选项来排序(从描述最多的到描述最少的)。
DataHandler 尝试查找与数据的 MIME 类型对应的 DataContentHandler。如果找到,则该 DataHandler 调用 DataContentHandler 的 getTransferDataFlavors
方法。
如果不 能找到 DataContentHandler,并且 DataHandler 是用 DataSource (或 URL)创建的,则返回一个表示此对象 MIME 类型和 java.io.InputStream
类的 DataFlavor。如果 DataHandler 是用对象和 MIME 类型创建的,则 getTransferDataFlavors 返回一个表示此对象 MIME 类型和对象类的 DataFlavor。
Transferable
中的
getTransferDataFlavors
DataContentHandler.getTransferDataFlavors()
public boolean isDataFlavorSupported(DataFlavor flavor)
此方法迭代 getTransferDataFlavors
返回的 DataFlavor,将每个 DataFlavor 与指定 flavor 进行比较。
Transferable
中的
isDataFlavorSupported
flavor
- 为数据所请求的 flavor
getTransferDataFlavors()
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
对于用 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
public void setCommandMap(CommandMap commandMap)
null
会使该 CommandMap 还原为
CommandMap.getDefaultCommandMap
方法所返回的 CommandMap。更改该 CommandMap 或将其设置为
null
将清除以前的 CommandMap 所缓存的所有数据。
commandMap
- 此 DataHandler 中使用的 CommandMap
CommandMap.setDefaultCommandMap(javax.activation.CommandMap)
public CommandInfo[] getPreferredCommands()
getPreferredCommands
方法。此方法返回一个表示可用命令子集的数组。如果存在由此 DataHandler 表示的 MIME 类型的多个命令,则已安装的 CommandMap 将选择适当的命令。
CommandMap.getPreferredCommands(java.lang.String)
public CommandInfo[] getAllCommands()
getAllCommands
方法。
CommandMap.getAllCommands(java.lang.String)
public CommandInfo getCommand(String cmdName)
getCommand
方法。
cmdName
- 命令名
CommandMap.getCommand(java.lang.String, java.lang.String)
public Object getContent() throws IOException
如果 DataHandler 是用一个对象实例化的,则返回该对象。
如果 DataHandler 是用 DataSource 实例化的,则此方法使用 DataContentHandler 返回此 DataHandler 所表示数据的内容对象。如果找不到此数据类型的 DataContentHandler
,则 DataHandler 返回数据的 InputStream。
IOException
- 如果此操作中发生 IOException。
public Object getBean(CommandInfo cmdinfo)
此方法调用 CommandInfo 的 getCommandObject
方法,带有用于加载 javax.activation.DataHandler
类本身的 ClassLoader
。
cmdinfo
- 与命令对应的 CommandInfo
public static void setDataContentHandlerFactory(DataContentHandlerFactory newFactory)
如果 DataContentHandlerFactory 已经被设置,则此方法抛出 Error。
newFactory
- DataContentHandlerFactory
Error
- 如果工厂已经被定义。
DataContentHandlerFactory