## From
將其它種類的對象和數據類型轉換為Observable

當你使用Observable時,如果你要處理的數據都可以轉換成展現為Observables,而不是需要混合使用Observables和其它類型的數據,會非常方便。這讓你在數據流的整個生命周期中,可以使用一組統一的操作符來管理它們。
例如,Iterable可以看成是同步的Observable;Future,可以看成是總是只發射單個數據的Observable。通過顯式地將那些數據轉換為Observables,你可以像使用Observable一樣與它們交互。
因此,大部分ReactiveX實現都提供了將語言特定的對象和數據結構轉換為Observables的方法。

在RxJava中,`from`操作符可以轉換Future、Iterable和數組。對于Iterable和數組,產生的Observable會發射Iterable或數組的每一項數據。
示例代碼
```java
Integer[] items = { 0, 1, 2, 3, 4, 5 };
Observable myObservable = Observable.from(items);
myObservable.subscribe(
new Action1<Integer>() {
@Override
public void call(Integer item) {
System.out.println(item);
}
},
new Action1<Throwable>() {
@Override
public void call(Throwable error) {
System.out.println("Error encountered: " + error.getMessage());
}
},
new Action0() {
@Override
public void call() {
System.out.println("Sequence complete");
}
}
);
```
輸出
```
0
1
2
3
4
5
Sequence complete
```
對于Future,它會發射Future.get()方法返回的單個數據。`from`方法有一個可接受兩個可選參數的版本,分別指定超時時長和時間單位。如果過了指定的時長Future還沒有返回一個值,這個Observable會發射錯誤通知并終止。
`from`默認不在任何特定的調度器上執行。然而你可以將Scheduler作為可選的第二個參數傳遞給Observable,它會在那個調度器上管理這個Future。
* Javadoc: [from(array)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#from(T%5B%5D))
* Javadoc: [from(Iterable)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#from(java.lang.Iterable))
* Javadoc: [from(Future)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#from(java.util.concurrent.Future))
* Javadoc: [from(Future,Scheduler)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#from(java.util.concurrent.Future,%20rx.Scheduler))
* Javadoc: [from(Future,timeout, timeUnit)](http://reactivex.io/RxJava/javadoc/rx/Observable.html#from(java.util.concurrent.Future,%20long,%20java.util.concurrent.TimeUnit))
### RxJavaAsyncUtil

此外,在可選包 `RxJavaAsyncUtil` 中,你還可以用下面這些操作符將actions,callables,functions和runnables轉換為發射這些動作的執行結果的Observable:
* fromAction
* fromCallable
* fromFunc0
* fromRunnable
在這個頁面 [Start](http://reactivex.io/documentation/operators/start.html) 查看關于這些操作符的更多信息。

注意:還有一個可選的`StringObservable`類中也有一個`from`方法,它將一個字符流或者一個REader轉換為一個發射字節數組或字符串的Observable。
### runAsync2
注意:這里與后面`start`操作符里的`runAsync`說明重復了
在單獨的`RxJavaAsyncUtil`包中(默認不包含在RxJava中),還有一個`runAsync`函數。傳遞一個`Action`和一個`Scheduler`給`runAsync`,它會返回一個`StoppableObservable`,這個Observable使用`Action`產生發射的數據項。
傳遞一個`Action`和一個`Scheduler`給`runAsync`,它返回一個使用這個`Action`產生數據的`StoppableObservable`。這個`Action`接受一個`Observable`和一個`Subscription`作為參數,它使用`Subscription`檢查`unsubscribed`條件,一旦發現條件為真就立即停止發射數據。在任何時候你都可以使用`unsubscribe`方法手動停止一個`StoppableObservable`(這會同時取消訂閱與這個`StoppableObservable`關聯的`Subscription`)。
由于`runAsync`會立即調用`Action`并開始發射數據,在你創建StoppableObservable之后到你的觀察者準備好接受數據之前這段時間里,可能會有一部分數據會丟失。如果這不符合你的要求,可以使用`runAsync`的一個變體,它也接受一個`Subject`參數,傳遞一個`ReplaySubject`給它,你可以獲取其它丟失的數據了。
### decode

`StringObservable`類不是默認RxJava的一部分,包含一個`decode`操作符,這個操作符將一個多字節字符流轉換為一個發射字節數組的Observable,這些字節數組按照字符的邊界劃分。
- ReactiveX
- Observables
- Single
- Subject
- Scheduler
- Operators
- 創建操作
- Create
- Defer
- Empty/Never/Throw
- From
- Interval
- Just
- Range
- Repeat
- Start
- Timer
- 變換操作
- Buffer
- FlatMap
- GroupBy
- Map
- Scan
- Window
- 過濾操作
- Debounce
- Distinct
- ElementAt
- Filter
- First
- IgnoreElements
- Last
- Sample
- Skip
- SkipLast
- Take
- TakeLast
- 結合操作
- And/Then/When
- CombineLatest
- Join
- Merge
- StartWith
- Switch
- Zip
- 錯誤處理
- Catch
- Retry
- 輔助操作
- Delay
- Do
- Materialize/Dematerialize
- ObserveOn
- Serialize
- Subscribe
- SubscribeOn
- TimeInterval
- Timeout
- Timestamp
- Using
- To
- 條件和布爾操作
- All/Contains/Amb
- DefaultIfEmpty
- SequenceEqual
- SkipUntil/SkipWhile
- TakeUntil/TakeWhile
- 算術和聚合操作
- Average/Concat/Reduce
- Max/Min/Count/Sum
- 異步操作
- 連接操作
- Connect
- Publish
- RefCount
- Replay
- 轉換操作
- 阻塞操作
- 字符串操作
- 按字母順序的操作符列表
- RxJava文檔和教程
- RxJava入門指南
- RxJava使用示例
- 實現自定義操作符
- 自定義插件
- Backpressure
- 錯誤處理
- Android模塊
- 參與開發
- 補充閱讀材料