22 Aralık 2016 Perşembe

URLConnection Sınıfı

Giriş
URLConnection sınıfı abstract bir sınıf. Genelde HttpURLConnection olarak kullanılıyor. GET, POST işlemlerini gerçekleştirebiliriz.

constructor
Şöyle yaparız.
URL url = new URL("http://...");
URLConnection urlc = url.openConnection();
addRequestProperty metodu
Şöyle yaparız.
urlc.addRequestProperty("Content-length", "500");
connect metodu
Bu metod alltaki socket bağlantısını açmaz. getInputStream, getContent(),getHeaderField() çağrılarından birisi gerçek bağlantıyı açar. Dolayısıyla bu metodu bence kullanmamak lazım. Şöyle yaparız.
urlc.connect();
disconnect metodu
Nesne ile işimiz bitince mutlaka çağrılmalıdır. Açıklaması şöyle.
Disconnect. Once the response body has been read, the HttpURLConnection should be closed by calling disconnect(). Disconnecting releases the resources held by a connection so they may be closed or reused.
Şöyle yaparız.
urlc.disconnect();
followRedirects metodu
Şöyle yaparız.
HttpURLConnection.setFollowRedirects(false);
getContentLength metodu
Şöyle yaparız.
urlc.getContentLength(); // -> calls getHeaderField("content-length")
getHeaderField metodu
Şöyle yaparız.
//get header by 'key'
String server = urlc.getHeaderField ("Server");
getHeaderFields metodu
Şöyle yaparız.
//get all headers
Map<String, List<String>> map = urlc.getHeaderFields ();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
  System.out.println("Key : " + entry.getKey() +
                     " ,Value : " + entry.getValue());
}
getInputStream metodu
Okuma için kullanılır. Adres http ise GET veya POST isteği gönderir. Şöyle yaparız.
try (InputStream is = urlc.getInputStream()) {  ...
}
Bağlantı açıldıktan sonra URL şöyle indirilir.
ReadableByteChannel rbc = Channels.newChannel(urlc.getInputStream());
FileOutputStream fos = new FileOutputStream(file);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
getOutputStream metodu
POST işleminde gönderilecek veriyi yazmak için kullanılır. Şöyle yaparız.
OutputStream out = urlc.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));
writer.print(postData);
witer.close();
getResponseCode metodu
Şöyle yaparız.
if (urlc.getResponseCode () == HttpURLConnection.HTTP_OK);
Şöyle yaparız.
if (urlc.getResponseCode () == 200) {...}
setChunkedStreamMode metodu
Şöyle yaparız.
urlc.setChunkedStreamingMode (0);
setConnectTimeout metodu
Şöyle yaparız.
urlc.setConnectTimeout (5000);
setDoInput metodu
GET ve POST işleminde gönderilen cevabı okumak için şöyle yaparız.
urlc.setDoInput (true);
setDoOutput metodu
POST işleminde gönderilecek veriyi yazmak için kullanılır. Şöyle yaparız.
urlc.setDoOutput (true);
setReadTimeout metodu
Bir connection var ve read() üzerinde bloke olduk. Belirtilen süre içinde okunacak veri gelmezse SocketTimeoutException fırlatılır
Şöyle yaparız.
urlc.setReadTimeout (5_000);
setRequestMethod metodu
Şöyle yaparız.
urlc.setRequestMethod ("HEAD");
Şöyle yaparız.
urlc.setRequestMethod ("POST");
setRequestProperty metodu
Form göndermek için Şöyle yaparız.
urlc.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded");
Json göndermek için şöyle yaparız.
urlc.setRequestProperty ("Content-Type", "application/json");
Eğer Json utf-8 ise şöyle yaparız.
urlc.setRequestProperty ("Content-Type", "application/json;charset=utf-8");
Ajax çağrısı yapmak için şöyle yaparız.
urlc.setRequestProperty ("X-Requested-With", "XMLHttpRequest");
Bağlantı kapanmasın diye şöyle yaparız.
urlc.setRequestProperty ("Connection", "Keep-Alive");
setUseCaches metodu
Şöyle yaparız.
urlc.setUseCaches (false);

19 Aralık 2016 Pazartesi

Collator Sınıfı

Giriş 
Soyut bir sınıftır. Locale'e göre String sıralamak için kullanılır.

compare metodu
Şöyle yaparız.
if (collator.compare("abc", "ABC") == 0) {
  System.out.println("Strings are equivalent");
}
getInstance metodu
Örnek
Şöyle yaparız.
Collator collator = Collator.getInstance(Locale.US);
Örnek
Şöyle yaparız.
Locale croatian = new Locale("hr", "HR");
Collator collator = Collator.getInstance(croatian);
setStrength metodu
Açıklaması şöyle
When collator strength is set to PRIMARY, then only PRIMARY differences are considered significant during comparison.
Şöyle yaparız.
collator.setStrength(Collator.PRIMARY);
Diğer
Kullanım
Sıralama işlemi için kullanılır.Şöyle yaparız.
List<String> list = ...;

Collator collator = ...;
Collections.sort (list, collator);

13 Aralık 2016 Salı

CompletionStage Arayüzü

Giriş
Bu arayüz reactive programlama içindir ancak içinde tam 36 metod barındırıyor! CompletionStage bir zincirdeki halkadır. Her halka Executor veya bir önceki CompletionStage tarafından tetiklenir. Halkamız bir sonraki CompletionStage nesnesini de tetikleyebilir.

Yaptığı işer şuna benzer.
1. Do this *then* that (chaining)
2. Do this *and* that (joining)
3 Do this on failure (recovering)

V = Result
T  = Data
U = Other Data

olarak okunur

Accept metodları future bitince bir metod çağırır ama sonuç dönmez. Akış tamamlanır.
Apply metodu future bitince yeni bir değer döndürür.
Combine metodları iki future alır ve yeni bir future'a çevirerek farklı bir tip döndürür.


acceptEitherAsync metodu - CompletionStage + Consumer
Two to One metoddur. İki CompletionStage nesnesinin birisinden gelen ilk sonucu Consumer'a geçer.

applyToEither metodu - CompletionStage + Function
Two to One metoddur. İki CompletionStage nesnesinin birisinden gelen ilk sonucu Function'a geçer.

exceptionally metodu
Hata varsa çağrılır.

runAfterBothAsync metodu - CompletionStage + Runnable + Executor
Two to One metoddur.

runAfterEitherAsync metodu - CompletionStage + Runnable + Executor
Two to One metoddur. İki CompletionStage nesnesinin birisinden gelen ilk sonucu Runnable'a geçer.
thenApply metodu
Bitince belirtilen metodu çağırarak farklı bir tipten sonuç dön.

thenAccept metodu
Bitince belirtilen metodu çağır.

thenAcceptBoth metodu - CompletionStage + BiConsumer
Two to One metoddur. Her iki CompletionStage bitince BiConsumer'ı çağırır.

thenApply metodu - Function
One to One metoddur. Yeni bir CompletionStage döner.

thenCombine metodu
Two to One metoddur. Her iki CompletionStage bitince BiConsumer'ı çağırır ve yeni bir tipe çevirir.

thenCombineAsync metodu - CompletionStage + BiFunction
Two to One metoddur. Belirtilen CompletionStage'i BiFunction'a geçer ve yeni bir CompletionStage döner.

thenComposeAsync metodu
One to One metoddur.

thenRunAsync metodu - Runnable + Executor
One to One metoddur. Runnable belirtilen Executor tarafından çağrılır.

toCompletableFuture metodu
CompletionStage'i  CompletableFuture dönüştürmek için şöyle yaparız
CompletionStage<Void> completionStage = ...;
CompletableFuture<Void>> future = completionStage.toCompletableFuture();

11 Aralık 2016 Pazar

Callable Arayüzü

Giriş
Bu arayüz Java 5 ile gelmiştir. Runnable arayüzünden farklı olarak bir sonuç döner ve Exception fırlatabilir. İskeleti şöyledir.
Callable<T> task = new Callable<T>() {
  @Override
  public T call() throws Exception {
    ...
    return T;
  }
};
call metodu
İmzası şöyledir
@Override
public T call() throws Exception;
Executor ve Future İle Kullanımı
Callable nesnesi ExecutoService nesnesine verilir ve çalıştırılır. Sonuç Future nesnesi vasıtasıyla elde edilir. Şöyle yaparız.
MyCallable myCallable = ...;
ExecutorService executor = ...;
Future<Boolean> future = executor.submit (myCallable);
Daha sonra Future sonucuna erişmek için şöyle yaparız.
try {

  Boolean result = future.get();
} catch (InterruptedException | ExecutionException e1) {
  ...
}