27 Ekim 2016 Perşembe

Condition Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.concurrent.locks.Condition;
constructor
Şöyle yaparız.
Lock lock = new ReentrantLock();
Condition condition  = lock.newCondition();
await metodu
Şöyle yaparız.
condition.await();
signal metodu
Açıklaması şöyle. Niçin may kelimesi kullanılmış bilmiyorum.
An implementation may (and typically does) require that the current thread hold the lock associated with this Condition when this method is called.
Bekleyen tek bir thread'i uyandırır. Şöyle yaparız.
condition.signal();
signalAll metodu
Bekleyen tüm thread'leri uyandırır.
condition.signalAll();
Consumer
Örnek ver.

Producer
Klasik kullanımı şöyledir.
1. Lock kilitlenir
2. Condition sinyallenir
3. Lock bırakılır
@Override
public void foo (){

  lock.lock();
  try{
    ...
    condition.signalAll();
  } finally{
    lock.unlock();
  }
}


26 Ekim 2016 Çarşamba

Jsoup Sınıfı - Request and Parse Data in HTML

Maven
Şöyle yaparız
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.14.3</version> </dependency>
Jsoup Sınıfı
get metodu
Document döndürür
Örnek
Şöyle yaparız
String url = "https://www.cnn.com/";    
Document doc = Jsoup.connect(url).userAgent("Mozilla/5.0").get();  

//get the whole page
String  html = doc.html();

//get the links on the page
Elements links = doc.select("a[href]");
for (Element link : links) {
  String line = link.attr("href");
  System.out.println(line);           
}
post metodu
Örnek
Şöyle yaparız
String url = "https://httpbin.org/post";            
Document doc = Jsoup.connect(url).ignoreContentType(true).timeout(1000)
  .data("custname", "google")    
  .data("custtel", "234")
  .userAgent("Mozilla/5.0")
  .post();

String str = doc.html();    
System.out.println(html);
Document Sınıfı
getElementsByTag metodu
Örnek
Şöyle yaparız
String url = "https://www.istockphoto.com/stock-illustrations";


Document document = Jsoup.connect(url).userAgent("Mozilla/5.0").get();        
Elements tag = document.getElementsByTag("img");

for (Element link : tag) {
  String imgurl = link.attr("abs:src");
  ... 
}

select metodu
Örnek
Şöyle yaparız
public Set<String> listLinks(String url, boolean includeMedia) throws IOException { Document doc = Jsoup.connect(url).get(); Elements links = doc.select("a[href]"); Elements imports = doc.select("link[href]"); Set<String> result = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); if(includeMedia) { Elements media = doc.select("[src]"); for (Element src : media) { result.add(src.absUrl("src")); //result.add(src.attr("abs:src")); } } for (Element link : imports) { result.add(link.absUrl("abs:href")); } for (Element link : links) { result.add(link.absUrl("abs:href")); } return result; }
text metodu
Html tag'lerini ayıklar. Şöyle yaparız.
String htmlString = "<div class=\"WordSection1\"> <p class=\"MsoNormal\">Hi<br> 
<br> <br> <br> Data is written in this mail.<br> <br> <br> 
<br> <o:p></o:p></p> </div>";

System.out.println(Jsoup.parse(htmlString).text());
Çıktı olarak şunu alırız
Hi Data is written in this mail.

JavaFX FileDialog Sınıfı

Giriş
Swing'teki karşılığı JFileChooser sınıfı.

constructor
Şöyle yaparız.
FileDialog dialog = new FileDialog ((Frame)null, "Select File to Open");
getFile metodu
Şöyle yaparız.
String file = dialog.getFile();
setMode metodu
Şöyle yaparız.
dialog.setMode (FileDialog.LOAD);
setVisible metodu
Şöyle yaparız.
dialog.setVisible(true);




23 Ekim 2016 Pazar

RSAPublicKeySpec Sınıfı

Giriş
Bu sınıf şöyle kullanılır.
RSAPublicKeySpec keySpec = ...;

KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);
constructor
Şöyle yaparız.
byte[] publicBytes = ...;

BigInteger modulus = new BigInteger(1, publicBytes);
BigInteger publicExponent = BigInteger.valueOf(65537L);

RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);


HttpTimeoutException Sınıfı

Giriş
Hiyerarşisi şöyle
java.lang.Object
 java.lang.Throwable
  java.lang.Exception
   java.io.IOException
    java.net.http.HttpTimeoutException
Açıklaması şöyle
Thrown when a response is not received within a specified time period.



TimeoutException Sınıfı

Giriş
Hiyerarşisi şöyle
java.lang.Object
 java.lang.Throwable
  java.lang.Exception
   java.util.concurrent.TimeoutException
Açıklaması şöyle
Exception thrown when a blocking operation times out. Blocking operations for which a timeout is specified need a means to indicate that the timeout has occurred. For many such operations it is possible to return a value that indicates timeout; when that is not possible or desirable then TimeoutException should be declared and thrown.

21 Ekim 2016 Cuma

ThreadLocalRandom Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.concurrent.ThreadLocalRandom;
Bu sınıf multi-thread programlarda daha iyi performans almak için kullanılıyor. Kodu şöyle
public class ThreadLocalRandom extends Random {
 ...
}
Random sınıfından kalıtıyor. Açıklaması şöyle. Yani Random sınıfı synchronized olduğu için multi-threaded kullanımda performansı iyi değil. Bu yüzden synchronized olmayan ThreadLocalRandom sınıfı geliştirilmiş.
The key problem is a lot of the code is legacy and can't (easily) be changed - Random was designed to be "thread-safe" by synchronizing all its methods. This works, in that instances of Random can be used across multiple threads, but it's a severe bottleneck as no two threads can simultaneously retrieve random data. A simple solution would be to construct a ThreadLocal<Random> object thereby avoiding the lock contention, however this still isn't ideal. There's still some overhead to synchronized methods even when uncontested, and constructing n Random instances is wasteful when they're all essentially doing the same job.

So at a high-level ThreadLocalRandom exists as a performance optimization,
Sonar
Sonar ThreadLocalRandom sınıfının kullanılmasına itiraz ediyor. SecureRandom kullanılmasını öneriyor. Açıklaması şöyle
Instances of ThreadLocalRandom are not cryptographically secure. Consider instead using SecureRandom in security-sensitive applications.
Ben Collections.shuffle() metodunu kullandım

current metodu
Şöyle yaparız.
ThreadLocalRandom random =ThreadLocalRandom.current();
longs metodu
Şöyle yaparız. Belirten sayı kadar eleman içeren bir LongStream döndürür.
ThreadLocalRandom.current().longs(10_000_000);
nextInt metodu
Örnek
Şöyle yaparız.
// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
random.nextInt (min, max + 1);
Örnek
Listeden rastgele bir nesne almak için şöyle yaparız
ArrayList<Member> memberList = ...
Member member = memberList.get(ThreadLocalRandom.current().nextInt(memberList.size()));
nextLong metodu
Şöyle yaparız.
random.nextLong()

20 Ekim 2016 Perşembe

DecimalFormatSymbols Sınıfı

Giriş
Bu sınıf aracılığıyla sayıyı formatlarken kullanılan semboller atanabilir.

Kullanım
DecimalFormat ile beraber kullanılır. DecimalFormat'a geçmek için şöyle yaparız.
DecimalFormatSymbols symbols = ...;
DecimalFormat decimalFormat = new DecimalFormat("#.##", symbols);
DecimalFormat'tan almak için şöyle yaparız
DecimalFormat decimalFormat = new DecimalFormat("0.######");
DecimalFormatSymbols symbols = decimalFormat.getDecimalFormatSymbols();
constructor
Şöyle yaparız.
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
constructor - Locale
Şöyle yaparız.
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
setDecimalSeparator metodu
Şöyle yaparız.
symbols.setDecimalSeparator('.');
setGroupingSeparator metodu
Şöyle yaparız.
symbols.setGroupingSeparator(' ');
setMinusSign metodu
Şöyle yaparız
symbols.setMinusSign('-');



19 Ekim 2016 Çarşamba

Awt Point Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.awt.Point;


18 Ekim 2016 Salı

BufferedWriter Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.io.BufferedWriter;
Tüm Java stream sınıflarıda olduğu gibi en dıştaki sınıf kapatılınca, en içte sarmalanan stream de kapatılır.

constructor - Writer
Bu sınıfı her zaman try içinde kullanmak gerekir.
FileWriter writer =  new FileWriter("write.txt");
try(BufferedWriter out = new BufferedWriter(writer)){
  ...
}
catch(IOException e){...}
Kazara System stream'lerini kapatmamaya dikkat etmek gerekir. Şu kod yanlış!
OutputStreamWriter writer =  new OutputStreamWriter(System.out);try(BufferedWriter out = new BufferedWriter (writer)){
  ...
}
close metodu
Şöyle yaparız.
out.close ();
write metodu
Şöyle yaparız.
BufferedWriter out = ...
String l = ...;
out.write (l);